shiro自定义密码加密验证

现在数据库密码基本上没有明文存储的,基本上都是加过密之后的信息,今天我们来处理一下我们平时在整合shiro的时候如何处理密文的情况,shiro的登录认证的时候会获取到UsernamePasswordToken里面的password和你返回SimpleAuthenticationInfo(user, user.getPassword(), “”);里面传入的密码进行匹配,一致则通过验证。
那么我们如何自定义密码验证呢,下面我们以MD5加密作为实现

@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		UsernamePasswordToken userToken = (UsernamePasswordToken)token;
		String username = userToken.getUsername();
		SysUserEntity user = loginService.findUserByName(username);
		//将登陆用户存入session中
		Subject currentSubject = SecurityUtils.getSubject();
		Session session = currentSubject.getSession();
	    session.setAttribute("loginUser",user);
		return new SimpleAuthenticationInfo(user, user.getPassword(), "");
	}

这边很明显的是前台传过来的是明文,我返回的时候是加过密的,所以肯定不能通过验证,现在开始让shiro走我们自己的验证逻辑

@Component
public class CredentialsMatcher extends SimpleCredentialsMatcher{

	 @Override
	    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
	        UsernamePasswordToken authcToken = (UsernamePasswordToken) token;
	        Object tokenCredentials = MD5Util.md5Encrypt32Lower(String.valueOf(authcToken.getPassword())+"LJW");
	        Object accountCredentials = getCredentials(info);
	        return accountCredentials.equals(tokenCredentials);
	    }
}

使用该方法

@PostConstruct
    public void myCredentialsMatcher() {
        //该句作用是重写shiro的密码验证,让shiro用我自己的验证
        setCredentialsMatcher(credentialsMatcher);
    }

这样既可完成用户的认证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值