本文介绍了Spring Security Oauth3.0实现短信验证码登录示例,分享给大家,具体如下:
<强>定义手机号登录令牌强>
/* * * @author lengleng * @date 2018/1/9 *手机号登录令牌 */公开课MobileAuthenticationToken延伸AbstractAuthenticationToken { 私有静态最终长serialVersionUID=SpringSecurityCoreVersion.SERIAL_VERSION_UID; 私人最终对象主体; 公共MobileAuthenticationToken(字符串移动){ 超级(空); 这一点。校长=移动; setAuthenticated(假); } 公共MobileAuthenticationToken(对象主要 Collection<& # 63;GrantedAuthority>延伸;当局){ 超级(当局); 这一点。校长=本金; super.setAuthenticated(真正的); } 公共对象getPrincipal () { 返回this.principal; } @Override 公共对象getCredentials () { 返回null; } 公共空间setAuthenticated(布尔isAuthenticated)抛出IllegalArgumentException { 如果(isAuthenticated) { 把新的IllegalArgumentException ( “不能设置这个令牌信任——使用构造函数将GrantedAuthority列表”); } super.setAuthenticated(假); } @Override 公共空间eraseCredentials () { super.eraseCredentials (); } } >之前<强>手机号登录校验逻辑强>
/* * * @author lengleng * @date 2018/1/9 *手机号登录校验逻辑 */公共类MobileAuthenticationProvider实现AuthenticationProvider { 私人UserService UserService; @Override 公共认证认证(认证身份验证)抛出AuthenticationException { MobileAuthenticationToken MobileAuthenticationToken=(MobileAuthenticationToken)认证; UserVo UserVo=userService.findUserByMobile ((String) mobileAuthenticationToken.getPrincipal ()); UserDetailsImpl userDetails=buildUserDeatils (userVo); 如果(userDetails==null) { 把新InternalAuthenticationServiceException(“手机号不存在:”+ mobileAuthenticationToken.getPrincipal ()); } MobileAuthenticationToken authenticationToken=new MobileAuthenticationToken (userDetails userDetails.getAuthorities ()); authenticationToken.setDetails (mobileAuthenticationToken.getDetails ()); 返回authenticationToken; } 私人UserDetailsImpl buildUserDeatils (UserVo UserVo) { 返回新UserDetailsImpl (userVo); } @Override 公众布尔的支持(Class<& # 63;比;身份验证){ 返回MobileAuthenticationToken.class.isAssignableFrom(身份验证); } 公共UserService getUserService () { 返回userService; } 公共空间setUserService (UserService UserService) { 这一点。userService=userService; } } >之前<>强登录过程过滤器处理强>
/* * * @author lengleng * @date 2018/1/9 *手机号登录验证过滤器 */公开课MobileAuthenticationFilter延伸AbstractAuthenticationProcessingFilter { 公共静态最终字符串SPRING_SECURITY_FORM_MOBILE_KEY=耙贫? 私人字符串mobileParameter=SPRING_SECURITY_FORM_MOBILE_KEY; 私人布尔postOnly=true; 公共MobileAuthenticationFilter () { 超级(新AntPathRequestMatcher (SecurityConstants。MOBILE_TOKEN_URL,“后”)); } 公开身份验证attemptAuthentication (HttpServletRequest请求, HttpServletResponse响应)抛出AuthenticationException { 如果(postOnly,,! request.getMethod () .equals (HttpMethod.POST.name ())) { 把新的AuthenticationServiceException ( “认证方法不支持:“+ request.getMethod ()); } 字符串移动=obtainMobile(请求); 如果(移动==null) { 移动=" "; } 移动=mobile.trim (); MobileAuthenticationToken MobileAuthenticationToken=new MobileAuthenticationToken(移动); setDetails(请求,mobileAuthenticationToken); 返回this.getAuthenticationManager () .authenticate (mobileAuthenticationToken); } 保护字符串obtainMobile (HttpServletRequest请求){ 返回request.getParameter (mobileParameter); } 保护无效setDetails (HttpServletRequest请求, MobileAuthenticationToken authRequest) { authRequest.setDetails (authenticationDetailsSource.buildDetails(请求)); } 公共空间setPostOnly(布尔postOnly) { 这一点。postOnly=postOnly; } 公共字符串getMobileParameter () { 返回mobileParameter; } 公共空间setMobileParameter(字符串mobileParameter) { 这一点。mobileParameter=mobileParameter; } 公共布尔isPostOnly () { 返回postOnly; } }Spring Security Oauth2.0实现短信验证码登录示例