文档章节

springboot token签名

o
 osc_fmg49rzg
发布于 2019/03/21 11:42
字数 309
阅读 19
收藏 0

使用JWT(JSON WEB TOKEN)工具, <artifactId>jjwt</artifactId>

 

生成token方式

package com.travelsky.auto.token;

import com.travelsky.config.TokenConfig;
import io.jsonwebtoken.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.stereotype.Component;

import java.sql.Date;
import java.time.LocalDateTime;
import java.time.ZoneId;

/**
 * token工厂
 */
@Component
@Slf4j
public class TokenFactory {

    @Autowired
    private TokenConfig tokenConfig;

    /**
     * 生成token
     * @param key
     * @return
     */
    public TokenContent createToken(final String key) {
        final LocalDateTime now = LocalDateTime.now();
        // Claims保存主题信息
        final Claims claims = Jwts.claims().setSubject(tokenConfig.getSubject());
        final String token = Jwts.builder()
                // 设置信息
                .setClaims(claims)
                // 设置主体
                .setIssuer(tokenConfig.getIssuer())
                // 设置创建时间
                .setIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()))
                // 设置过期时间
                .setExpiration(Date.from(now.plusMinutes(tokenConfig.getExpiration()).atZone(ZoneId.systemDefault()).toInstant()))
                // 使用HS512加密
                .signWith(SignatureAlgorithm.HS512, key)
                // 生成字符串token
                .compact();
        return new TokenContent(token, claims);
    }

 

根据前端取回的token进行验证方式

package com.travelsky.auto.token;

import com.travelsky.config.TokenConfig;
import io.jsonwebtoken.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.stereotype.Component;

import java.sql.Date;
import java.time.LocalDateTime;
import java.time.ZoneId;

/**
 * token工厂
 */
@Component
@Slf4j
public class TokenFactory {

    @Autowired
    private TokenConfig tokenConfig;
/**
     * 验证token
     * @param key 与subject一致
     * @param token 页面传回的token字符串
     */
    void parser(final String key, final String token) {
        try {
            // 验证token
            Jwts.parser().setSigningKey(key).parseClaimsJws(token);
        } catch (UnsupportedJwtException | MalformedJwtException | IllegalArgumentException | SignatureException ex) {
            log.error("不可用Invalid Token", ex);
            throw new BadCredentialsException("验证失败,Token不可用:Invalid token: ", ex);
        } catch (ExpiredJwtException expiredEx) {
            log.info("过期Token is expired", expiredEx);
            throw new ExpiredTokenException("token过期", expiredEx);
        }
    }
}

 

token配置类

package com.travelsky.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@Data
@ConfigurationProperties(prefix = "token")
public class TokenConfig {

    private String issuer;

    private Long expiration;

    private String subject;
}

 

token配置文件

token:
  issuer: antlord
  expiration: 20
  subject: token

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

OSChina 周五乱弹 —— 你大妈还是你大妈

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @watergood:是时候分享一波我的这张纯音乐歌单了,过去的五年多时间里,我陆陆续续地把听到的好听的纯音乐添加了进去,目前一共65首,相信总...

小小编辑
今天
19
0
在Objective-C中生成随机数 - Generating random numbers in Objective-C

问题: I'm a Java head mainly, and I want a way to generate a pseudo-random number between 0 and 74. In Java I would use the method: 我主要是Java头,我想要一种生成0到74之间的伪随......

技术盛宴
今天
13
0
ftp-ftps-sftp的关系

Ftp FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作...

独钓渔
今天
12
0
使Vim将所有空格显示为字符 - Make Vim show ALL white spaces as a character

问题: I can't find a way to make Vim show all white spaces as a character. 我找不到让Vim将所有空白显示为字符的方法。 All I found was about tabs, trailing spaces etc. 我发现的只......

富含淀粉
今天
23
0
RN 接入高德地图遇到的一些问题

react-native-amap-geolocation、react-native-amap3d 1、iOS Geolocation.getCurrentPosition 获取坐标后,没有返回 address 信息? 逆地理编码 Android 默认返回逆地理编码,而 iOS 需要手...

Jack088
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部