这个就没什么好说的了,能看到这个教程的,估计都是可以说精通了
SpringBoot的使用
一个安全框架,但不只是一个安全框架。它能实现多种多样的功能。并不只是局限在web层。在国内的市场份额占比高于
SpringSecurity,是使用最多的安全框架
可以实现用户的认证和授权。比
SpringSecurity要简单的多。
我的理解就是可以进行客户端与服务端之间验证的一种技术,取代了之前使用Session来验证的不安全性
为什么不适用Session?
原理是,登录之后客户端和服务端各自保存一个相应的SessionId,每次客户端发起请求的时候就得携带这个SessionId来进行比对
- Session在用户请求量大的时候服务器开销太大了
- Session不利于搭建服务器的集群(也就是必须访问原本的那个服务器才能获取对应的SessionId)
它使用的是一种令牌技术
Jwt字符串分为三部分
Header
存储两个变量
payload
存储很多东西,基础信息有如下几个
userIdSignature
这个是上面两个经过Header中的算法加密生成的,用于比对信息,防止篡改Header和payload
然后将这三个部分的信息经过加密生成一个
JwtToken的字符串,发送给客户端,客户端保存在本地。当客户端发起请求的时候携带这个到服务端(可以是在
cookie,可以是在
header,可以是在
localStorage中),在服务端进行验证
好了,废话不多说了,下面开始实战,实战分为以下几个部分
SpringBoot整合ShiroSpringBoot整合JwtSpringBoot+Shiro+Jwt
两种方式:
pom.xml
application.properties
创建ShiroConfig.java进行一些简单的配置
创建自定义的Realm
编写 Shiro 的配置类:ShiroConfig
将 Shiro 的配置信息(spring-shiro.xml 和 spring-web.xml)以 Java 代码配置的形式改写:
创建JwtUtil
解析:
创建一个Controller
JWTUtil中的
isVerify进行该jwt数据有效的校验
由于需要对shiro的SecurityManager进行设置,所以不能使用shiro-spring-boot-starter进行与springboot的整合,只能使用spring-shiro
由于需要实现无状态的web,所以使用不到Shiro的Session功能,严谨点就是将其关闭
这样如果调用
getSession()方法会抛出异常
这个一般是固定的写法,其中写了大量注释
也就是在Shiro的拦截器中多加一个,等下需要在配置文件中注册这个过滤器
其中封装了需要传递的
jwt字符串
创建判断
jwt是否有效的认证方式的
Realm
配置一些信息
在JwtRealm中的授权部分,可以使用
JwtUtil.decode(jwt).get("username")获取到username,使用username去数据库中查找到对应的权限,然后将权限赋值给这个用户就可以实现权限的认证了
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000428/viewspace-2785176/ ,如需转载,请注明出处,否则将追究法律责任。