MENU

Shiro 报错 Please ensure that at least one realm can authenticate these tokens 大坑

April 25, 2022 • 默认分类,教程,java

本文借鉴:stackoverflow 中关于该问题的解答

最近在使用shiro作为授权认证框架,配合JWT,组建了前后端分离的一个个人项目,shiro+jwt需要实现AuthenticationToken类,代码非常简单,大致如下:

public class JwtToken implements AuthenticationToken {
    private String token;

    public JwtToken(String token) {
        this.token = token;
    }

    @Override
    public Object getPrincipal() {
        return this.token;
    }

    @Override
    public Object getCredentials() {
        return this.token;
    }
}

使用subject.login()登录的时候需要传入JwtToken实例

但是shiro一直报错:Please ensure that at least one realm can authenticate these tokens

译文:请确保至少有一个领域可以验证这些令牌

大致意思就是shiro对于自定义的Token也不是不支持,只是需要我们手动去让它支持,但是对于没有读过shiro文档天天面向百度编程的我,真的很头大,于是我打开了stackoverflow

stackoverflow中有这样的解答,说我们的TokenAuthorizingRealm类可能缺少相应的支持方法

1650885477872.png

而对于该方法,我们需要在AuthenticationToken的实现类(Realm 类)里添加如下方法即可:

@Override
public boolean supports(AuthenticationToken token) {
    return token instanceof BearerAuthenticationToken;
}