@Value("${password.encrypt.class:}")
private String driver;
private boolean verify(SysUser sysUser,String password) {
log.info("密码模式登录");
if(StringUtils.isBlank(driver)) {
return MD5Util.getMD5Pwd(sysUser.getSalt(),password).equals(sysUser.getUserPwd());
}
try {
Constructor<?> constructor = Class.forName(driver).getConstructor();
Object encryptService = constructor.newInstance();
Method verify = encryptService.getClass().getMethod("verify", String.class,String.class,String.class,String.class);
Boolean result = (Boolean) verify.invoke(encryptService,sysUser.getSalt(),sysUser.getUserPwd(),sysUser.getUserName(),password);
return result;
}catch (Exception e) {
log.error("登录插件方法有误",e);
return MD5Util.getMD5Pwd(sysUser.getSalt(),password).equals(sysUser.getUserPwd());
}
}
driver是动态配置的你的项目类路径。例如:
password.encrypt.class=xxx.xxx.xxx.biz.api.service.strategy.SyfPasswordLoginServiceImpl
/**
* syf密码登录策略
*
* @Author: guoxinsong
* @Date: 2021/10/11
*/
@Slf4j
@Service("SyfPasswordLogin")
public class SyfPasswordLoginServiceImpl {
public boolean verify(String salt, String userPwd, String userName, String password) {
log.info("syf密码模式登录");
try {
if (salt.equals(userPwd)) {
return MD5Util.encrypt(password).equals(userPwd);
} else {
return MD5Util.getMD5Pwd(salt, password).equals(userPwd);
}
} catch (Exception e) {
log.error("登录插件方法有误", e);
return MD5Util.getMD5Pwd(salt, password).equals(userPwd);
}
}
}
从而实现别的项目对接你的项目动态实现。