河北城乡建设厅网站显示不全,后端和前端哪个是青春饭,建网站是怎么造成的,网站网页?问?建议先看完Spring Security总体架构介绍和Spring Security认证架构介绍#xff0c;然后从FilterChainProxy的doFilterInternal函数开始#xff0c;配合文章进行debug以理解Spring Security认证源码的执行流程。 在之前的Spring Security认证架构介绍中#xff0c;我们已经知… 建议先看完Spring Security总体架构介绍和Spring Security认证架构介绍然后从FilterChainProxy的doFilterInternal函数开始配合文章进行debug以理解Spring Security认证源码的执行流程。 在之前的Spring Security认证架构介绍中我们已经知道直接访问一个资源默认的大致流程是
用户发送资源请求资源需要认证。后端保存请求并重定向到login登录界面。实际流程为匿名用户在AnonymousAuthenticationFilter获得一个匿名身份然后在AuthorizationFilter过滤器中验证权限抛出一个AccessDeniedException异常该异常被ExceptionTranslationFilter捕获并调用handleAccessDeniedException函数处理该函数中判断如果是匿名用户就会保存请求并重定向到登录页面。用户进入认证界面并发送表单进行登录。表单请求进入FilterChain并在UsernamePasswordAuthenticationFilter进行验证。实际流程为FilterChainProxy调用UsernamePasswordAuthenticationFilter继承的父类AbstractAuthenticationProcessingFilter的过滤方法doFilterdoFilter再调用重写的过滤器类的attemptAuthentication函数UsernamePasswordAuthenticationFilter处理流程即attemptAuthentication函数逻辑 从表单中获得username和password封装成UsernamePasswordAuthenticationToken。使用AuthenticationManager实现类为ProviderManager验证UsernamePasswordAuthenticationToken。验证失败ProviderManager抛出异常信息为“用户名或密码错误”被UsernamePasswordAuthenticationFilter捕获实际是父类AbstractAuthenticationProcessingFilter的过滤方法doFilter下的异常处理机制UsernamePasswordAuthenticationFilter调用AuthenticationFailureHandler类实现类为SimpleUrlAuthenticationFailureHandler的onAuthenticationFailure方法onAuthenticationFailure方法保存原请求将错误信息保存到response中然后应用themeleaf设置到动态网页并重定向到/login?error。验证成功ProviderManager调用DefaultAuthenticationEventPublisher发布一个AuthenticationSuccessEvent事件然后清除Token中Credentials信息之后返回到UsernamePasswordAuthenticationFilter更新认证到用户的会话信息然后调用successfulAuthentication将认证存入SecurityContext调用rememberMeServices的loginSuccess调用ApplicationContextAnnotationConfigServletWebServerApplicationContext发送一个InteractiveAuthenticationSuccessEvent事件然后调用SavedRequestAwareAuthenticationSuccessHandler的onAuthenticationSuccess函数在这里将进行重定向到原请求路径。
进入登录示意图 登录验证失败示意图 登录验证成功示意图