前后端分离常规需求,前端第一次登录授权,获取 token,后续接口需要统一带上该参数,实现鉴权
安装
鉴权框架
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
生成 token 框架
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
JWT
jwt:
tokenHeader: Authorization #JWT存储的请求头
secret: spring-boot-jwt-secret #JWT加解密使用的密钥
expiration: 604800 #JWT的超期限时间(60*60*24*7)
tokenHead: 'Bearer ' #JWT负载中拿到开头
定义工具类:JwtTokenUtil.java
过滤器
JWT登录授权:继承 OncePerRequestFilter,实现 doFilterInternal 方法
自定义返回结果:未登录或登录过期,实现 AuthenticationEntryPoint
自定义返回结果:没有权限访问时,实现 AccessDeniedHandler
鉴权
SecurityConfig,继承 WebSecurityConfigurerAdapter,设置白名单(比如登录),设置允许跨域,白名单之外的全部需要鉴权,将上面定义的过滤器添加进来
测试
这边主要有3个接口
第一个登录,成功后返回 token
第二个刷新 token,传旧 token,成功后,返回刷新后的 token
第三个,测试一下接口鉴权是否成功