2011-12-22 162 views
0

我使用Spring Security 3.0.7Spring Security认证

我在配置文件中的网络安全规则,允许只是为了验证的用户访问某些网页:

<intercept-url pattern="/faces/paginas/secured/**" access="isAuthenticated()"/> 

当匿名用户试图访问任何这些页面,呈现登录表单,以便输入用户名和密码。

这是默认行为。

但有没有什么办法来呈现自定义页面而不是登录表单? (例如,一个页面只显示类似“拒绝访问”的消息)

回答

0

因为它是写在春季安全文档(第9.2节),你可以指定accessDeniedHandler它可以处理403错误(禁止):

<bean id="accessDeniedHandler" 
    class="org.springframework.security.web.access.AccessDeniedHandlerImpl"> 
    <property name="errorPage" value="/accessDenied.htm"/> 
</bean> 

此外,在点9.2.2可以读:

缺省情况下,AccessDeniedHandlerImpl被使用,其只是发送一个403(禁止)响应于客户端。或者,您可以显式配置一个实例(如上例所示),并设置一个错误页面URL,它将把请求转发给它。这可以是一个简单的“拒绝访问”页面,如JSP,也可以是一个更复杂的处理程序,如MVC控制器。当然,你可以自己实现接口并使用你自己的实现。

+0

但我认为AccessDeniedHandler,你在它制定的错误页面,是要求未authorizated(即,进行身份验证,但不具有访问资源所需的角色的用户),ISN”它呢?但是我的情况是不同的(没有通过身份验证的用户并尝试访问仅限经过身份验证的用户访问的资源)。我认为在我的情况下不会重定向到您所说的页面。 – choquero70 2011-12-23 08:58:14

+0

确实,你是对的。在这种情况下,我有一个想法,认证用户可以获得某种角色,即ROLE_GUEST,但据我所知,Spring Security不提供这种解决方案,所以必须通过实现自己的类来扩展安全系统。 – 2011-12-23 12:05:03

+0

对于未经过身份验证的用户,Spring Security具有默认角色。这是IS_AUTHENTICATED_ANONYMOUSLY角色,但对我的目的没有用处。然而,我在考虑如果我改变web安全规则,使用所有经过身份验证的用户拥有的角色(例如ROLE_USER),而不是使用“isAuthenticated()”,那么如果未经过身份验证的用户试图访问它,他/她应该被重定向到自定义的accessDenied页面,而不是登录页面。那将是我想要的。我必须尝试一下。 – choquero70 2011-12-24 01:41:43

0

你必须通过

<form-login login-page="/accessDenied.htm" /> 

要启用“正常登录”来选择拒绝访问页面,你必须要连接另一个网页,其中提交其登录表单/ j_spring_security_check(如果你不这样做更改默认值)。

0

为什么不添加authentication-failure-url属性到form-login标记?

<form-login login-page="/login.htm" 
         default-target-url="/successview.htm" 
         always-use-default-target="true" 
         authentication-failure-url = "/accessdenied.htm?login_error=1" />