【问题标题】:spring security authentication required pagespring安全认证需要页面
【发布时间】:2012-01-26 10:33:10
【问题描述】:

我使用 Spring Security 3.0.7

我在配置文件中有一个网络安全规则,只允许经过身份验证的用户访问某些页面:

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

当匿名用户尝试访问这些页面中的任何一个时,会呈现登录表单,以便输入用户名和密码。

这是默认行为。

但是有没有办法呈现自定义页面而不是登录表单? (例如,仅显示“访问被拒绝”之类的消息的页面)

【问题讨论】:

    标签: security spring authentication login


    【解决方案1】:

    正如 Spring Security Documentation(第 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,它将请求转发到该 URL。这可以是一个简单的“拒绝访问”页面,例如 JSP,也可以是更复杂的处理程序,例如 MVC 控制器。当然,您可以自己实现接口并使用自己的实现。

    【讨论】:

    • 但我认为 AccessDeniedHandler 和您在其中设置的错误页面是针对未经授权的请求(即经过身份验证但没有访问资源所需角色的用户),不是吗?但我的情况不同(未经身份验证的用户尝试访问其访问权限仅限于经过身份验证的用户的资源)。我认为在我的情况下不会重定向到您说的页面。
    • 确实,你是对的。在这种情况下,我有一个想法,未经身份验证的用户可以获得一些角色,即 ROLE_GUEST 但据我所知,Spring Security 没有提供开箱即用的解决方案,因此必须通过实现自己的类来扩展安全系统。
    • Spring Security 对未经过身份验证的用户具有默认角色。这是 IS_AUTHENTICATED_ANONYMOUSLY 角色,但对我的目的没有用。但是,我在想,如果我更改网络安全规则,使用所有经过身份验证的用户都拥有的角色(例如 ROLE_USER),而不是使用“isAuthenticated()”,那么如果未经过身份验证的用户尝试访问它,他/她应该被重定向到自定义的 accessDenied 页面,而不是登录页面。那将是我想要的。我得试试。
    • 我在我的应用程序中使用了该场景。不幸的是 - 未通过身份验证的用户被重定向到登录页面。
    【解决方案2】:

    您必须通过

    指定您的访问被拒绝页面
    <form-login login-page="/accessDenied.htm" />
    

    要启用“正常登录”,您必须连接另一个页面,将其登录表单提交到 /j_spring_security_check(如果您不更改默认值)。

    【讨论】:

      【解决方案3】:

      为什么不将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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        • 2014-10-30
        • 2016-12-12
        • 1970-01-01
        • 2020-06-19
        • 2021-05-17
        • 1970-01-01
        相关资源
        最近更新 更多