当前位置:网站首页>Jjwt generate token
Jjwt generate token
2022-07-27 07:36:00 【qq_ thirty-four million one hundred and thirty-five thousand si】
Realization principle

Import maven rely on
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
Create a solid object
package com.wl.study.utils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SessionInfo {
private Long userId;
private String userName;
private String token;
}
establish token Generation and analysis
package com.wl.study.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.util.Optional;
public class JwtUtil {
/*** * Generate token * @param sessionInfo * @return */
public static Optional<String> generateToken(SessionInfo sessionInfo){
String token = Jwts.builder()
// The theme
.setSubject(JwtConfig.JWT_SUBJECT)
// Custom properties
.claim(JwtConfig.JWT_USERID, sessionInfo.getUserId())
.claim(JwtConfig.JWT_USERNAME, sessionInfo.getUserName())
// Compress
.compressWith(CompressionCodecs.DEFLATE)
// Signature
.signWith(SignatureAlgorithm.HS512, JwtConfig.JWT_SIGNING_KEY)
.compact();
return Optional.of(MessageFormat.format("{0}{1}",JwtConfig.JWT_TOKEN_PREFIX,token));
}
/*** * analysis token * @param token * @return */
public static Optional<SessionInfo> parserToken(String token){
if(StringUtils.isEmpty(token)){
return Optional.empty();
}
Claims claims = Jwts.parser()
.setSigningKey(JwtConfig.JWT_SIGNING_KEY)
.parseClaimsJws(token.replace(JwtConfig.JWT_TOKEN_PREFIX, ""))
.getBody();
SessionInfo sessionInfo = SessionInfo.builder().token(token).build();
if(claims.containsKey(JwtConfig.JWT_USERID)){
sessionInfo.setUserId( Long.valueOf(claims.get(JwtConfig.JWT_USERID).toString()));
}
if(claims.containsKey(JwtConfig.JWT_USERNAME)){
sessionInfo.setUserName( claims.get(JwtConfig.JWT_USERNAME).toString());
}
return Optional.of(sessionInfo);
}
private static class JwtConfig{
private final static String JWT_SUBJECT ="integral";
private final static String JWT_USERID ="userId";
private final static String JWT_USERNAME ="userName";
/*** * secret key */
private final static String JWT_SIGNING_KEY = "[email protected]!&key^#";
/** * jwt The prefix of */
public static final String JWT_TOKEN_PREFIX = "Bearer ";
}
public static void main(String[] args) {
SessionInfo sessionInfo = new SessionInfo();
sessionInfo.setUserId(1L);
sessionInfo.setUserName(" Zhang Fei ");
Optional<String> optional = JwtUtil.generateToken(sessionInfo);
System.out.println(MessageFormat.format("{0}:{1}"," Generate token",optional.orElse(null)));
System.out.println(MessageFormat.format("{0}:{1}"," analysis token",JwtUtil.parserToken(optional.get())));
}
}
establish token Tool class
package com.wl.study.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.util.Optional;
public class JwtUtil {
/*** * Generate token * @param sessionInfo * @return */
public static Optional<String> generateToken(SessionInfo sessionInfo){
String token = Jwts.builder()
// The theme
.setSubject(JwtConfig.JWT_SUBJECT)
// Custom properties
.claim(JwtConfig.JWT_USERID, sessionInfo.getUserId())
.claim(JwtConfig.JWT_USERNAME, sessionInfo.getUserName())
// Compress
.compressWith(CompressionCodecs.DEFLATE)
// Signature
.signWith(SignatureAlgorithm.HS512, JwtConfig.JWT_SIGNING_KEY)
.compact();
return Optional.of(MessageFormat.format("{0}{1}",JwtConfig.JWT_TOKEN_PREFIX,token));
}
/*** * analysis token * @param token * @return */
public static Optional<SessionInfo> parserToken(String token){
if(StringUtils.isEmpty(token)){
return Optional.empty();
}
Claims claims = Jwts.parser()
.setSigningKey(JwtConfig.JWT_SIGNING_KEY)
.parseClaimsJws(token.replace(JwtConfig.JWT_TOKEN_PREFIX, ""))
.getBody();
SessionInfo sessionInfo = SessionInfo.builder().token(token).build();
if(claims.containsKey(JwtConfig.JWT_USERID)){
sessionInfo.setUserId( Long.valueOf(claims.get(JwtConfig.JWT_USERID).toString()));
}
if(claims.containsKey(JwtConfig.JWT_USERNAME)){
sessionInfo.setUserName( claims.get(JwtConfig.JWT_USERNAME).toString());
}
return Optional.of(sessionInfo);
}
private static class JwtConfig{
private final static String JWT_SUBJECT ="integral";
private final static String JWT_USERID ="userId";
private final static String JWT_USERNAME ="userName";
/*** * secret key */
private final static String JWT_SIGNING_KEY = "[email protected]!&key^#";
/** * jwt The prefix of */
public static final String JWT_TOKEN_PREFIX = "Bearer ";
}
public static void main(String[] args) {
SessionInfo sessionInfo = new SessionInfo();
sessionInfo.setUserId(1L);
sessionInfo.setUserName(" Zhang Fei ");
Optional<String> optional = JwtUtil.generateToken(sessionInfo);
System.out.println(MessageFormat.format("{0}:{1}"," Generate token",optional.orElse(null)));
System.out.println(MessageFormat.format("{0}:{1}"," analysis token",JwtUtil.parserToken(optional.get())));
}
}
边栏推荐
- 次轮Okaleido Tiger即将登录Binance NFT,引发社区热议
- opengl-shader学习笔记:varying变量
- Introduction to network -- overview of VLAN and trunk
- Guava的基础功能与集合
- Tcp/ip protocol analysis (tcp/ip three handshakes & four waves + OSI & TCP / IP model)
- 海康h9摄像头用xshell无法连接(没有启用ssh)
- mysql备份策略
- Chapter 6 Shell Logic and Arithmetic
- MySQL backup strategy
- flink原理(一) 状态的TTL管理、容错机制
猜你喜欢

(2022杭电多校三)1011.Taxi(曼哈顿最值+二分)

Advanced IO outline

Expose Prometheus metrics in Perl programs

VLAN trunk experiment

JS make a traffic light

Understanding and learning of node flow and processing flow in io

C common function integration-2

(2022牛客多校三)J-Journey(dijkstra)

Clickhouse notes 1 | introduction, features | installation and use based on centos7 system | common data types | mergetree table engine | SQL operation

flink1.14 sql基础语法(一) flink sql表查询详解
随机推荐
UUID与secrets模块
Gossip: Recently, many friends talk about going abroad
SQLite common function integration
Will Flink CDC constantly occupy Oracle's memory by extracting Oracle's data, and finally cause oracle-040
View the dmesg log before server restart
TCP/IP协议分析(TCP/IP三次握手&四次挥手+OSI&TCP/IP模型)
用oracle来演示外键的使用
Flutter实战-请求封装(一)
Prior Attention Enhanced Convolutional Neural Network Based Automatic Segmentation of Organs at Risk
(2022 Hangdian multi school III) 1011.taxi (Manhattan maximum + 2 points)
2022 0726 Gu Yujia's study notes
Demonstrate the use of foreign keys with Oracle
[wsl2] configure the USB camera connecting the USB device and using the host
oracle清理含有引用分区的表的数据库磁盘空间
(2022 Niuke multi school III) j-journey (Dijkstra)
Functools module
Routing between VLANs (explanation + verification)
opengl-shader学习笔记:varying变量
UiAutomator常用类之UI手势动作
Tableau prep is connected to maxcompute and only writes simple SQL. Why is this error reported?