基于JWT认证的SpringBootStarter模块

# 前言

一个基于 Spring Security 的 JWT Token认证模块。这是我对之前项目一直在使用的JWT认证的模块进行封装,也是第一次编写Spring-Boot-Starter组件。

编写过程中参考了很多其他组件比如spring-boot-starter-securityOAuth2WebSecurityConfiguration等等,实现了一个基于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声明JwtUserFactoryJwtTokenUtils

  • JwtTokenUtils
    Jwt Token 生成和解析工具。有多个构造器选择,可以自定义签名,算法,Key.
  • JwtUserFactory
    根据Claims生成JwtUser

# 修改Configuration

# 自动配置

若没有声明WebSecurityConfigurerAdapter类型的Bean, 将会使用JwtConfigurerAdapter作为默认配置。

# 手动配置

在你的WebSecurityConfigurerAdapter中的configure(HttpSecurity http)方法中添加如下代码

http
         .apply(new JwtConfigurer<>(jwtTokenUtils(), jwtUserFactory()))

其中jwtTokenUtilsjwtUserFactory为先前声明的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请参考

# first spring security (opens new window)

其中有两份配置,一份是手动配置DEMO,一份是自动配置DEMO

# GITHUB

JWT-Security-Spring-Boot-Starter (opens new window)