Shiro免密码登录

最近遇到的需求,实现手机号+验证码登录,验证码能够通过查数据库校验,但是密码是加密过的对不上,需要免密登录,所以写一下帮助后人

1.shiro的配置文件里面有一个是<bean id="credentialsMatcher"  class="xxxxx.xxxMatcher">这需要一个继承HashedCredentialsMatcher的子类,重写doCredentialsMatch方法

2.自定义一个token,继承自UsernamePasswordToken,添加一个标识符表名是否免密登录。

3.Subject subject = SecurityUtils.getSubject();
   EasyTypeToken token = new EasyTypeToken(loginName);
   subject.login(token);

4.回到第一步   重写方法的第一行  直接强转 token   获取标识符   如果为免密登录  直接返回true

 

下面贴部分代码

public class EasyTypeToken extends UsernamePasswordToken {


    private static final long serialVersionUID = -2564928913725078138L;

    private LoginType type;


    public EasyTypeToken() {
        super();
    }


    public EasyTypeToken(String username, String password, LoginType type, boolean rememberMe,  String host) {
        super(username, password, rememberMe,  host);
        this.type = type;
    }
    /**免密登录*/
    public EasyTypeToken(String username) {
        super(username, "", false, null);
        this.type = LoginType.NOPASSWD;
    }
    /**账号密码登录*/
    public EasyTypeToken(String username, String password) {
        super(username, "", false, null);
        this.type = LoginType.PASSWORD;
    }

    public LoginType getType() {
        return type;
    }


    public void setType(LoginType type) {
        this.type = type;
    }
}



public enum LoginType {
    PASSWORD("password"), // 密码登录
    NOPASSWD("nopassword"); // 免密登录

    private String code;// 状态值

    private LoginType(String code) {
        this.code = code;
    }
    public String getCode () {
        return code;
    }
}

 

 

 

HashedCredentialsMatcher子类的重写方法部分代码

@Override
public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
    EasyTypeToken tk = (EasyTypeToken) token;
    if(tk.getType().equals(LoginType.NOPASSWD)){
        return true;
    }
    .....
}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值