若依框架集成手机验证码登录
程序开发
2023-09-04 16:12:31
用户名登录正常使用,额外添加手机验证码登录
新建两个类,结构如下:
SmsCodeAuthenticationProvider代码如下 :
package com.shukun.framework.security.authentication;import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;/*** 自定义短信登录身份认证*/
public class SmsCodeAuthenticationProvider implements AuthenticationProvider {private UserDetailsService userDetailsService;public SmsCodeAuthenticationProvider(UserDetailsService userDetailsService){setUserDetailsService(userDetailsService);}/*** 重写 authenticate方法,实现身份验证逻辑。*/@Overridepublic Authentication authenticate(Authentication authentication) throws AuthenticationException {SmsCodeAuthenticationToken authenticationToken = (SmsCodeAuthenticationToken) authentication;String telephone = (String) authenticationToken.getPrincipal();// 委托 UserDetailsService 查找系统用户UserDetails userDetails = userDetailsService.loadUserByUsername(telephone);// 鉴权成功,返回一个拥有鉴权的 AbstractAuthenticationTokenSmsCodeAuthenticationToken authenticationResult = new SmsCodeAuthenticationToken(userDetails, userDetails.getAuthorities());authenticationResult.setDetails(authenticationToken.getDetails());return authenticationResult;}/*** 重写supports方法,指定此 AuthenticationProvider 仅支持短信验证码身份验证。*/@Overridepublic boolean supports(Class> authentication) {return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication);}public UserDetailsService getUserDetailsService() {return userDetailsService;}public void setUserDetailsService(UserDetailsService userDetailsService) {this.userDetailsService = userDetailsService;}
}
标签:
上一篇:
我与IDEA的不舍情缘
下一篇:
相关文章
-
无相关信息