/Login如果用户没有输入有效凭据,它如何重定向URL ?Pav*_*ral 11
所有重要的魔力都在安全过滤器链中.
某些组件在某些时候会检查请求是否经过身份验证.通常它是最后一个过滤器 - FilterSecurityInterceptor(根据请求路径检查访问条件),但它可以是 MethodSecurityInterceptor(@Secured注释检查)甚至是您自己的自定义代码.重要的是这个检查将结束AuthenticationException或被AccessDeniedException抛出.
下一个重要的组成部分是ExceptionTranslationFilter.此过滤器检查抛出的异常是否为AuthenticationException或AccessDeniedException配置了调用AuthenticationEntryPoint.根据配置的身份验证机制,这可能会将重定向发送到登录页面或使用WWW-Authenticate标头发送401响应(例如BASIC auth).
因此,基于FORM的登录的整个过程看起来像这样(它可能看起来像一团糟,但它实际上设计得很好,一旦你理解了原理就不那么复杂):
/foo.html
FilterSecurityInterceptor根据您的安全表达式进行检查isAuthenticated()并抛出AccessDeniedExceptionExceptionTranslationFilter,而后者又被调用LoginUrlAuthenticationEntryPoint301重定向响应/login.html/login.html
FilterSecurityInterceptor由此路径检查,允许匿名访问POST /login.html
UsernamePasswordAuthenticationFilterAuthenticationManager调用它来执行实际身份验证(实际身份验证委托给其他组件 - 通常DaoAuthenticationProvider和UserDetailsService)Authentication令牌被标记为authenticated并被放置SecurityContextHolder(因此可供其他组件使用)AuthenticationSuccessHandler 被调用,可能只是重定向用户 /foo.htmlSecurityContextPersistenceFilter(检查SecurityContextHolder)接收,它在HTTP会话上存储身份验证/foo.html
SecurityContextPersistenceFilter 从会话恢复身份验证 SecurityContextHolderFilterSecurityInterceptor 再次检查您的访问规则,并允许进一步处理新近验证的请求(即调用调度程序servlet)/foo.html| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |