当前位置: 首页 > news >正文

个人网站策划书模板wordpress用网站测速

个人网站策划书模板,wordpress用网站测速,做微信商城网站公司,广州海珠区有什么大学security/day08 这个功能大家还熟悉么#xff1f;我们在登录网站的时候#xff0c;除了让你输入用户名和密码#xff0c;还会有个勾选框#xff1a; 记住我#xff01;#xff01;#xff01;不是让大家记住我哈。 值得一提的是#xff0c;Spring Security 也提供了这个… security/day08 这个功能大家还熟悉么我们在登录网站的时候除了让你输入用户名和密码还会有个勾选框 记住我不是让大家记住我哈。 值得一提的是Spring Security 也提供了这个功能我们今天就来体验一把。 代码实战 其实想要开启rememberMe功能其实很简单只需要简单的修改下配置即可 Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests().anyRequest().authenticated().and().formLogin().permitAll().and().rememberMe().and().csrf().disable();return http.build();}实现思路 当用户登录网站后并且勾选rememberMe服务端认证通过则把用户信息进行算法加密加密完成后通过cookie让浏览器把cookie保存在本地当浏览器关闭后重新打开网站浏览器会把cookie带给服务端服务端校验cookie确定用户身份进而自动登录 源码分析 首先我们找切入点我们前面讲过当引入一个新功能的时候必定会引入一个configurer,rememberMe 也不例外点击.rememberMe()进入源码 看到了RememberMeConfigurer我们点进去看下主要是看init和configure方法 init public void init(H http) throws Exception {validateInput();String key getKey();RememberMeServices rememberMeServices getRememberMeServices(http, key);http.setSharedObject(RememberMeServices.class, rememberMeServices);LogoutConfigurerH logoutConfigurer http.getConfigurer(LogoutConfigurer.class);if (logoutConfigurer ! null this.logoutHandler ! null) {logoutConfigurer.addLogoutHandler(this.logoutHandler);}RememberMeAuthenticationProvider authenticationProvider new RememberMeAuthenticationProvider(key);authenticationProvider postProcess(authenticationProvider);http.authenticationProvider(authenticationProvider);initDefaultLoginFilter(http);}getKey() 这个就是我们刚开始设置的key如果不配置每次系统都会重启导致需要重新登录getRememberMeServices() 用来实现自动登录、处理登录成功和登录失败的逻辑主要有两个继承 PersistentTokenBasedRememberMeServices 持久化令牌到数据库TokenBasedRememberMeServices http.authenticationProvider(authenticationProvider);创建一个认证器放到providerList里面initDefaultLoginFilter(http); 在自定生成登录页面加上rememberMe 选框 configure public void configure(H http) {RememberMeAuthenticationFilter rememberMeFilter new RememberMeAuthenticationFilter(http.getSharedObject(AuthenticationManager.class), this.rememberMeServices);if (this.authenticationSuccessHandler ! null) {rememberMeFilter.setAuthenticationSuccessHandler(this.authenticationSuccessHandler);}rememberMeFilter postProcess(rememberMeFilter);http.addFilter(rememberMeFilter);}创建了一个过滤器RememberMeAuthenticationFilterpostProcess(rememberMeFilter); 注入IOC容器在http中加入rememberMe过滤器 看完了RememberMeConfigurer的两个核心方法之后我们现在知道容器中已经有了RememberMeAuthenticationFilter和RememberMeAuthenticationProvider 现在分别来看下 RememberMeAuthenticationFilter private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws IOException, ServletException {Authentication rememberMeAuth this.rememberMeServices.autoLogin(request, response);if (rememberMeAuth ! null) {// Attempt authenticaton via AuthenticationManagertry {rememberMeAuth this.authenticationManager.authenticate(rememberMeAuth);// Store to SecurityContextHolderSecurityContext context SecurityContextHolder.createEmptyContext();context.setAuthentication(rememberMeAuth);SecurityContextHolder.setContext(context);onSuccessfulAuthentication(request, response, rememberMeAuth);this.securityContextRepository.saveContext(context, request, response);if (this.successHandler ! null) {this.successHandler.onAuthenticationSuccess(request, response, rememberMeAuth);return;}}catch (AuthenticationException ex) {this.rememberMeServices.loginFail(request, response);onUnsuccessfulAuthentication(request, response, ex);}}chain.doFilter(request, response);}调用autoLogin方法 从cookie提取用户身份在调用loadUserByUsername获取用户详细信息校验用户身份是否合法(根据不同的令牌存储方式进行不同校验)如果校验通过则返回Authentication(RememberMeAuthenticationToken) authenticate 如果autoLogin成功则和前面普通登录一样进行认证因为这里生成的是RememberMeAuthenticationToken则最终会被RememberMeAuthenticationProvider处理 如果认证返回则进行对应的响应处理 RememberMeAuthenticationProvider public Authentication authenticate(Authentication authentication) throws AuthenticationException {if (!supports(authentication.getClass())) {return null;}if (this.key.hashCode() ! ((RememberMeAuthenticationToken) authentication).getKeyHash()) {throw new BadCredentialsException(this.messages.getMessage(RememberMeAuthenticationProvider.incorrectKey,The presented RememberMeAuthenticationToken does not contain the expected key));}return authentication;}这里的逻辑只做了一步校验key的hashCode是否一致如果一致则校验通过
http://www.pierceye.com/news/284043/

相关文章:

  • 企业招聘网站模板网站页面设计需要遵循的六大原则
  • 网站界面设计说明关键词排名顾问
  • 滨江区网站开发公司贵阳住房和城乡建设局网站
  • 如何建设小网站邢台市天气预报15天
  • 网站收录量低怎么做舟山公司网站制作
  • 部队网站模板计算机网站建设员
  • 对象储存做网站微博内网站怎么做的
  • 运城做网站要多少钱谷歌网站英文
  • 校园网站建设的意见与建议做儿童交互网站
  • 7黄页网站建设网站建设培训会讲话
  • 百度推广公司地址苏州优化方式
  • 做一个电商网站建设银行网站打不开用什么浏览器
  • 保定住房和城乡建设局网站沙洋网站定制
  • 北京电脑培训网站网站首页怎么做全屏swf
  • 网站建设 设计 优化 维护爱站网关键词挖掘工具
  • 做电影收费网站二级域名查询
  • 销售网站模板a5站长网网站交易
  • 网站需要怎么做的吗做营销网站那个好
  • 苏州网站建设软件收费广东网站设计哪家专业
  • 中国产品网免费网站网站自定义功能实现
  • 做微信小程序和做网站短视频素材下载网站
  • 自治区住房和城乡建设厅网站自己怎么健网站视频教程
  • 昆明建站网址dw怎么做秋季运动会网站
  • 为什么要建设个人网站在建工程
  • o2o网站设计方案做一个网站只做前端怎么做
  • 长沙网站建设公司联系方式网站注册手机号安全吗
  • 广州市网站建设服务机构建设部网站查资质
  • 医院网站建设思路wordpress mx主题
  • 天津如何做百度的网站虚拟机做局域网网站服务器
  • 网站建设维护需要懂哪些知识网站建设优质公司