JWTSpringFrameworkSpring Boot

JWT Spring Boot starter

2017-08-19  本文已影响492人  zerouwar


自己弄的一个可自定义配置JWT的spring-boot-starter,方便在spring security中集成JWT认证。

使用

首先在你的spring boot项目的pom.xml添加我的github个人仓库

    <repositories>
        <repository>
            <id>chenhuanming-repo</id>
            <name>chenhuanming-repo</name>
            <url>https://raw.githubusercontent.com/zerouwar/my-maven-repo/master</url>
        </repository>
    </repositories>

然后添加jwt-spring-boot-starter依赖

    <dependency>
        <groupId>cn.chenhuanming</groupId>
        <artifactId>jwt-spring-boot-starter</artifactId>
        <version>0.0.2</version>
    </dependency>

这样已经集成了JWT认证。可以运行你的spring boot项目,用用户名和密码发出POST /login请求(spring security默认用户user,密码在启动日志可以获取),可以拿到一个带token的json

    {
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwic2hvcnRFeHAiOjE1MDMwNjg4NDksImV4cCI6MTUwMzY3MzU4OSwiaWF0IjoxNTAzMDY4Nzg5LCJhdXRob3JpdGllcyI6IlJPTEVfVVNFUiJ9.s6iAIh52gyfrPWfLEPjasYZ7GNFt6Vwb0itLZ5De89I"
    }

这样就可以用这个token去访问受保护的api了(默认所有api都要求认证,后面会说怎么自定义配置),在这个例子里就像下面这样设置http header的Authorization

    Authorization=Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwic2hvcnRFeHAiOjE1MDMwNjg4NDksImV4cCI6MTUwMzY3MzU4OSwiaWF0IjoxNTAzMDY4Nzg5LCJhdXRob3JpdGllcyI6IlJPTEVfVVNFUiJ9.s6iAIh52gyfrPWfLEPjasYZ7GNFt6Vwb0itLZ5De89I

默认token有一个短期有效期(15分钟)和长期有效期(7天),如果token在长期有效期内,短期失效可以要求刷新token,服务端如果检查到token失效,会返回412状态码,并在response body返回一个带refreshToken的json。

自定义配置

很少情况需要用spring security那个随机密码,所以很多时候我们需要自定义UserDetailsService。只需要把自己实现的UserDetailsService注册为spring Beanjwt-spring-boot-starter会自动发现你写的UserDetailsService

其他支持自动发现的组件有:

另外可以通过application.yml设置一些配置信息,如要改变默认的token短期有效期,可以设置utils.jwt.shortExp的值(分钟),更多配置信息可以看JWTProperties类。

最后,一般程序都会继承WebSecurityConfigurerAdapter来定义spring security的安全配置,引用了jwt-spring-boot-starter后,不能继承WebSecurityConfigurerAdapter,需要继承JWTSecurityAutoConfiguration(这个类继承了WebSecurityConfigurerAdapter),JWTSecurityAutoConfiguration只是包装了WebSecurityConfigurerAdapter,基本使用方法都跟原来一样,除了void configure(HttpSecurity http)方法不能直接重写(通过实现JWTSecurityAutoConfigurationvoid configureHttpSecurity(HttpSecurity http)钩子方法)。可以查看JWTSecurityAutoConfiguration的源码,大概就是这样:

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().addFilterBefore(tokenAuthorizationFilter, SecurityContextPersistenceFilter.class);
}

项目地址

项目托管在github

上一篇下一篇

猜你喜欢

热点阅读