基于JWT认证的SpringBootStarter模块
前言
一个基于 Spring Security 的 JWT Token认证模块。这是我对之前项目一直在使用的JWT认证的模块进行封装,也是第一次编写Spring-Boot-Starter组件。
编写过程中参考了很多其他组件比如spring-boot-starter-security、OAuth2WebSecurityConfiguration等等,实现了一个基于JWT Token的即插即用认证授权模块。该模块依赖如下,已经在模块POM添加,所以不必在项目POM中另外添加以下模块防止冲突。如果项目已经有一下模块可以使用exclude去掉本模块的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>注意
该模块只是提供对Token的认证和授权,至于登录过程请自行决定策略,可以配合Spring Security的其他安全策略(formLogin()...)进行验证,又或者自定义验证Controller。
安装
添加到POM依赖
<dependency>
<groupId>com.github.759434091</groupId>
<artifactId>jwt-security-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>配置
声明两个Bean:JwtUserFactory、JwtTokenUtils
JwtTokenUtilsJwt Token 生成和解析工具。有多个构造器选择,可以自定义签名,算法,Key.
JwtUserFactory根据
Claims生成JwtUser
修改Configuration
自动配置
若没有声明WebSecurityConfigurerAdapter类型的Bean,将会使用JwtConfigurerAdapter作为默认配置。
手动配置
在你的WebSecurityConfigurerAdapter中的configure(HttpSecurity http)方法中添加如下代码
http
.apply(new JwtConfigurer<>(jwtTokenUtils(), jwtUserFactory()))其中jwtTokenUtils和jwtUserFactory为先前声明的Bean。
使用
生成Token
请自定义验证策略,例如用户名密码验证,可以配合Spring Security的其他安全策略进行验证,又或者自定义验证Controller。验证成功之后,自行决定Token需要携带的Claims,通过调用如下方法生成Token并返回给前端。其中expireField和expireAmount为Calendar类型的参数。
jwtTokenUtils.createJWT(Map<String, Object> claims, int expireField, int expireAmount)验证Token
前端将Token缓存,当需要认证的时候请将Token以如下形式附加在请求头
Authorization:Bearer your_token请求头为Authorization,其值为"Bearer " + 你的Token,请注意Bearer后面空格的存在,前缀总共有7位。
获取JwtUser
JwtUser 通过jwtUserFactory解析Token payload中的Claims生成。生成之后可以在Controller通过如下形式获取,在参数加上如下参数即可获得
@TokenUser JwtUser xxx选择Authority
JWT-Security 支持Spring Security的Authority权限控制,只需要在JwtUserFactoryBean中实现生成的JwtUser中的getGrantedAuthorities方法。
DEMO
配置DEMO请参考,其中有两份配置,一份是手动配置DEMO,一份是自动配置DEMO。
