Spring Boot + Security + JWT 实现接口统一 Token 校验

前后端分离常规需求,前端第一次登录授权,获取 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
第三个,测试一下接口鉴权是否成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码下载