什么叫做认证
1.有人觉得 用户输入用户账号密码,我去数据库匹配一致,才叫认证
2.第二种认证是,我出一个token 你匹配我的token是否过期,token解析之后的用户名是否存在,都可以就认证通过,你可以使用我的资源了
我叫第一种 为 账号密码认证
第二种叫做 token认证
我们的jeegc中的shiro认证是第二种【token认证】
大概shiro流程
1.写一个过滤器 ,把路径 /** 都过滤了
2 在过滤器里面触发shiro的login(token) 匹配token
3结果:用户认证成功 用户认证失败
匹配token逻辑
匹配token逻辑在ShiroRealm#doGetAuthenticationInfo中处理
这里处理 token是否过期,token解析的用户是否存在的逻辑
注意:没有密码配对逻辑,我们的shiro是拿着token干活的,token是在登录之后生成的
也就是登录的密码匹配逻辑,不需要shiro做
注意的点 你发现shiro没有处理password
password比对过程留给你的登录方法去做
shiro一直只拿着你的token比对【是否token过期】,【用户是否存在】,就是不处理password
也就是在你匹对好密码之后 生成一个token,shiro只操作你的token
password这这一步不在shiro做 而是自己写登录逻辑的时候处理
详细一点
1定义ShiroConfig //所有的shiro配置都在这里 比如哪些url需要过滤 ,哪些不需要
2定义ShiroRealm //ShiroRealm的 认证/授权 方法都在这里做
3重写认证的token类 我们只需要在认证的时候处理token就可以,不需要配对password
4自定义一些过滤器
JwtFilter token过滤器
ResourceCheckFilter //不知道干嘛的 可以放着不学习
CustomShiroFilterFactoryBean //不知道干嘛的 可以放着不学习
ShiroConfig
ShiroConfig里面有什么东西
#shiroFilter 定义了那些url需要那些过滤器 ,那些不需要过滤器
几乎所有的/** 需要过滤器 走JwtFilter
JwtFilter过滤器
判断如果请求带有token直接触发 shiro.login(token)方法
shiro.login(token) 不抛异常就能过 这个过滤器
shiro.login(token)触发之后,最终其实会触发的是 ShiroRealm的#doGetAuthenticationInfo方法
ShiroRealm#doGetAuthenticationInfo方法
doGetAuthenticationInfo方法 中处理了
1.token是否失效
2.token解析出来的username 查询用户时候存在
3 如果token认证没问题 触发刷新token操作(只要用户一直使,就延迟token登录状态)
客户使用接口,接口中存在 @RequiresPermissions("sys:user:list")
就会进入 ShiroRealm的#doGetAuthorizationInfo
判断用户是否存在权限
不存在抛异常
感觉自己啰嗦了