权限
①SSM+RBAC
②归档
服务端禁用Cookie
Cookie+拦截器控制权限
①SpringBoot+Sa-Token+Redisson+JWT
②RedissonConfig(手动配置)
请求分为:不带token/带token
路由分为:不需要登录/需要登录/需要权限
①不带token/带token+不需要登录:前台/登录/登录失败/未登录/未授权(不需要登录,带token也不会调用Shiro)
②不带token+登录:用户不存在/密码错误/登录成功(发放token)
③不带token+需要登录:(@RequiresAuthentication)重定向至未登录
④带token+需要登录:(调用Shiro登录)token无效/用户不存在/密码错误/token有效
⑤不带token+需要权限:(@RequiresPermissions)重定向至未授权
⑥带token+需要权限:(调用Shiro登录)token无效/用户不存在/密码错误/token有效(再调用Shiro授权)
①SpringBoot+MBP+Shiro+JWT
②Shiro整合JWT(固定权限)
③Shiro Cookie原理
登录时调用doGetAuthenticationInfo()登录
登录成功后用户信息被保存到全局的Subject中
授权时调用doGetAuthorizationInfo()查询权限(每次授权都要查询)
④Shiro JWT原理
ShiroConfig配置不需要/需要登录路由
JWTFilter拦截需要登录路由并调用JWTRealm登录
Shiro注解调用JWTRealm登录/授权
①SpringBoot+MBP+Shiro+JWT
②Shiro整合JWT(动态权限)
③引入Redis和Spring Cache
①同构单点登录
shiro_redis中的两组项目shiro_1/shiro_2和shiro_3/shiro_4的登录模块是统一的,即将Session/Token存储到同一个Redis中
②异构单点登录
两个项目的登录机制不同,项目之间的单点登录实际上是跨项目访问时构造登录状态
③引入第三方框架
跨项目访问时构造登录状态,只不过引入第三方框架如CAS/OAuth
①分布式部署
②shiro_1/shiro_2(Shiro+Cookie)
将Session交由Redis管理(ShiroConfig+RedisShiroSessionDao)
User类需要实现序列化
shiro_1/shiro_2域名相同即可共享登录
docker-compose多项目部署
③shiro_3/shiro_4(Shiro+JWT)
登录时储存Token,访问后台时校验Token
①SpringBoot+JPA+Shiro+Cookie/JWT
②异构单点登录
shiro_5(Shiro+Cookie)
shiro_6(Shiro+JWT)
③单点登录方式
回调(项目1带着用户信息访问项目2,项目2调用项目1接口查询用户信息)
构造(项目1带着加密用户信息访问项目2,项目2校验加密用户信息并构造项目2登录用户信息)
④单机缓存
shiro_5不启用Redis时Session放在本机内存中(由Shiro管理)
shiro_6不启用Redis时Token放在本机Spring Cache中(@EnableCaching+spring.cache.type)
⑤Nginx负载均衡
①CAS服务端
将修改过的CAS服务端cas.war(cas-server-4.0.0/不需要HTTPS)中的内容解压放到apache-tomcat-7.0.90(2)\cas\ROOT目录下
配置Tomcat本地单端口多域名(apache-tomcat-7.0.90(2)\conf\server.xml)
修改hosts映射域名(C:\Windows\System32\drivers\etc\hosts)
CAS单点认证地址:http://cas.test.com/login(casuser+Mellon)
②hosts映射域名
CAS服务端:127.0.0.1 cas.test.com
③开发环境
开发环境下cas_ssm/cas_springboot分别使用127.0.0.1:8080/127.0.0.1:8000启动(需要修改对应CAS配置)
①SpringBoot+CAS
②CAS客户端
③CAS配置
第三方Springboot CAS客户端(也可以将cas_ssm中的web.xml移植到cas_springboot中)
application.properties(对应web.xml配置)
Application @EnableCasClient(Springboot自动配置)
④跨域单点登录
CAS单点登录的核心是:当cas_ssm登录过后,浏览器会保存CAS服务器的Cookie CASTGC,
当cas_springboot访问CAS服务器时会带上这个Cookie(这个Cookie cas_ssm/cas_springboot获取不到)
(除非CAS服务器将Cookie CASTGC跨域写入,否则无法跨域单点登录)