Shiro(一)——Shrio增加token验证

项目需求:Shrio增加token验证。
需求分析:
1.Shrio的认证方式的流程:

登录Controller中,根据输入的账号和密码创建token,然后调用subject.login(token)方法,subject会委托给securityManager,由securityManager再执行login方法。

由ModularRealmAuthenticator调用realm的doGetAuthenticationInfo进行认证。如果不正确则抛出异常执行onFailedLogin()

2.基于session的登录认证

在ShiroFilterFactoryBean中可以添加Filter来验证是否已登录。

isAccessAllowed方法通过subject.getPrincipal()是否为空来判断该subject是否已登录。
getSubject()是从当前线程得到绑定的subject

那subject是什么时候创建的呢?
ShiroFilterFactoryBean里就包含了AbStractShiroFilter,每次请求的时候都会执行doFilterInternal里的createSubject,如何跟session绑定的呢?放到sessionManage里再分析,这里简单略过。subject会根据context来生成,而context中则包含了session。

每次请求都会重新设置Session和Principals,看到这里大概就能猜到:如果是web工程,直接从web容器获取httpSession,然后再从httpSession获取Principals,本质就是从cookie获取用户信息,然后每次都设置Principal,这样就知道是哪个用户的请求,并只得到这个用户有没有人认证成功,–本质:依赖于浏览器的cookie来维护session的。
实现方法:1.创建一个自己的realm用于验证第三方的token,继承AuthorizingRealm,需要supports方法来支持自定义的token。

public class MyRealm extends AuthorizingRealm {

    public boolean supports(AuthenticationToken token) {
   
        return token instanceof GylToken;
    }

    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
   
        return null;
    }

    //认证
    @Override
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值