Spring Security Oauth2.0实现短信验证码登录示例

  

本文介绍了Spring Security Oauth3.0实现短信验证码登录示例,分享给大家,具体如下:

  

 Spring Security Oauth2.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实现短信验证码登录示例