Spring security “春季安全”;例外申请”;

Spring security “春季安全”;例外申请”;,spring-security,Spring Security,使用Spring Security预验证,我的web应用程序在遇到未充分验证异常时会重新定向到/login\u disabled.html applicationContext security preauth.xml示例 <beans:property name="exceptionMappings"> <beans:props> <beans:prop key="org.springfram

使用Spring Security
预验证
,我的web应用程序在遇到
未充分验证异常
时会重新定向到
/login\u disabled.html

applicationContext security preauth.xml示例

        <beans:property name="exceptionMappings">
            <beans:props>
                <beans:prop key="org.springframework.security.
InsufficientAuthenticationException">
                    /login_disabled.html

/login_disabled.html
基于此,我似乎可以重新引导用户再次登录


我是否需要将用户重新定向到负责身份验证的网页?

我不太清楚这里有什么问题。如果已设置表单登录,则会自动重定向到登录页面,而无需进一步配置。如果用户试图在未经身份验证的情况下访问安全页面,则调用
AuthenticationEntryPoint
来启动身份验证

使用
ExceptionMappingAuthenticationFailureHandler
不充分的AuthenticationException
映射到重定向url无论如何都不会起作用,因为:

  • 这并不表示身份验证失败。它表示用户在尝试访问安全资源时仅进行匿名身份验证的情况。(与身份验证失败(如输入错误凭据或用户已禁用状态)相反。)
  • 它甚至从未被扔过。(仅在上述链接代码中实例化并作为参数传递。)

  • 如果您有一个自定义表单登录实现,那么我认为您所需要的只是一个正确配置的
    LoginUrlAuthenticationEntryPoint
    bean,该bean引用自
    。我在前面的评论中已经说过了。你有什么样的自定义身份验证过滤器是完全不相关的。只要设置了
    LoginUrlAuthenticationEntryPoint
    ,Spring Security就会重定向到配置的登录url,前提是在目标url安全的情况下,请求只进行匿名身份验证?这里的矛盾在哪里<代码>声明访问与模式匹配的URL所需的内容,而不是必须授予的权限。RPC请求不包含身份验证信息,因此将永远不允许它访问您配置为仅对持有
    角色\u USER
    权限的身份验证主体可用的资源。该日志消息(从我在回答中链接的方法发出)本身并不意味着入口点不可访问,但是如果配置中唯一的拦截url标记是
    ,那么肯定会使登录页面无法访问。您需要在另一个请求之前插入
    。Pre-auth意味着某些外部身份验证机制以某种形式(通常是http头)为每个请求提供身份验证信息。如果没有此类信息与请求关联,Spring安全性将无能为力。它如何可能指示外部系统(例如Siteminder)对请求进行身份验证?因此,如果会话过期,并且您的预身份验证筛选器没有找到外部系统应该提供的信息,那么请求将不会得到身份验证,除非您设置了一些其他身份验证机制(例如表单登录)及其入口点(
    LoginUrlAuthenticationEntryPoint
    )。