Shiro 免密登录

最近做接入SSO单点登录,需要从别的系统返回的用户然后直接登录,所以需要用到免密登录,其实很简单,自己写一个类继承HashedCredentialsMatcher类,然后重写doCredentialsMatch,判断免密登录规则可结合实际业务需求更改,符合规则的return true就代表密码校验通过,代码如下:

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;

public class CybHashedCredentialsMatcher extends HashedCredentialsMatcher {

	@Override
	public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) {
		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
		if(StringUtils.isNotBlank(token.getSubtype())) {
			return true;
		}
		// 将密码加密与系统加密后的密码校验,内容一致就返回true,不一致就返回false
		return super.doCredentialsMatch(token, info);
	}
}

我的UsernamePasswordToken是继承了org.apache.shiro.authc.UsernamePasswordToken然后添加了subtype字段的,这是ThinkGem大师的代码

173435_gdYE_2419190.png

最后在Shiro登录认证方法doGetAuthenticationInfo里面把HashedCredentialsMatcher类换成刚刚写好的CybHashedCredentialsMatcher类就行了,然后放入setCredentialsMatcher方法作为参数。

173931_0LjJ_2419190.png

最后是免密登录代码

        UsernamePasswordToken token = new UsernamePasswordToken();
        //账号一定要在数据库中, 密码随便填
		token.setUsername("lisi");
		token.setPassword("123".toCharArray());
        //subtype为判断是否免密登录的重要参数
		token.setSubtype("SSO登录");
		SecurityUtils.getSubject().login(token);

 

转载于:https://my.oschina.net/u/2419190/blog/1560577

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值