最近在忙的事情
因为公司的工作任务,我目前在做一个防火墙管理端平台的一些api引入,我们公司是跟奇安信有合作,工作内容就是前端vue页面上拼字符串,用的是组件化开发elmentiUI,天天就是看饿了吗官方文档去写,然后看接口文档,拼接字符串,后端调用通用方法,可以说,拼JSON字符串拼的我人都傻了
为什么去看SpringSecurity-jwt
因为之前在老东家,我们做的管理平台端很简单,因为用户体量小,都是偏向业务,而判断用户什么的,都存在了session里,比较简单,我也没有仔细看,天天只是crud,使用中间件,来到新单位,我发现技术盲点了,对。。。。就是token,我不太清楚,所以准备恶补!
Jwt认证授权-操作认证
用户 ----》角色 ------》权限
用户和角色一对多,角色对权限是一对一,Security根据不同的角色授权
RBAC —》基于权限的一种控制
Jwt介绍
JWT是 Json Web Token 的缩写。它是基于 RFC 7519 标准定义的一种可以安全传输的 小巧 和 自包含 的JSON对象。由于数据是使用数字签名的,所以是可信任的和安全的。JWT可以使用HMAC算法对secret进行加密或者使用RSA的公钥私钥对来进行签名。
Jwt的好处 —无状态
每次进行http请求,在请求头中都可以加入,里面可以存放各种用户信息,客户端存放
如果服务宕机,也可以进行请求,可以应对于各种多服务场景,而且比较安全(通过自己加密钥)然后通过自己加的密钥去解析,比较安全
结构:
JWT包含了使用 . 分隔的三部分:
1.Header 头部,包含了两部分:token类型和采用的加密算法。
2.Payload 负载,Token的第二部分是负载,它包含了claim, Claim是一些实体(通常指的用户)的状态和额外的元数据。
3.Signature 签名,创建签名需要使用编码后的header和payload以及一个秘钥,使用header中指定签名算法进行签名。
让我们用一张图,大概梳理下这个流程(看视频截取下来的哈哈)
SpringSecurity的概念
Spring系列,直接与SpringBoot整合比较方便
概念:其实构成就是拦截器,一推filter,各种链路,但是我们使用就直接实现它的接口去重写方法就好
代码篇
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>