java动态实现密码不同加密方式登录

    @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);
        }
    }
}

从而实现别的项目对接你的项目动态实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

damoneric_guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值