JsonWEBtokens生成
来源:互联网 发布:网络男歌手比较慢的歌 编辑:程序博客网 时间:2024/05/19 12:14
由于现在前端框架越来越流行,前后端分离渐渐也成了大多数公司的选择,那么此时对于用户的身份认证就显得尤为重要,下面来介绍JWT(JsonWEBtokens)生成token,解密加密的过程,服务端生成token之后,客户端每次请求的时候讲token带入在header或者post参数中,服务端做校验
maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
TokenUtils
public class TokenUtils {
public static String getJWTString(String tel,Date expires,Key key){
if (tel == null) {
throw new NullPointerException("null username is illegal");
}
if (expires == null) {
throw new NullPointerException("null expires is illegal");
}
if (key == null) {
throw new NullPointerException("null key is illegal");
}
//用签名算法HS256和私钥key生成token
SignatureAlgorithm signatureAlgorithm =SignatureAlgorithm.HS256;
String jwtString = Jwts.builder()
.setIssuer("Jersey-Security-Basic")//设置发行人
.setSubject(tel)//设置抽象主题
.setAudience("user")//设置角色
.setExpiration(expires)//过期时间
.setIssuedAt(new Date())//设置现在时间
.setId("1")//版本1
.signWith(signatureAlgorithm,key)
.compact();
return jwtString;
}
public static boolean isValid(String token, Key key) {
try {
Jwts.parser().setSigningKey(key).parseClaimsJws(token.trim());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static String getName(String jwsToken, Key key) {
if (isValid(jwsToken, key)) {
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(key).parseClaimsJws(jwsToken);
return claimsJws.getBody().getSubject();
}
return null;
}
public static void main(String[] args) {
Key key=KeyUtil.getKey();
Calendar c=Calendar.getInstance();
c.add(c.DATE, 10);
String token=getJWTString("李未央", c.getTime(), key);
System.out.println("验签结果"+isValid(token, key));
System.out.println("用户名"+getName(token, key));
}
KeyUtils
public class KeyUtil {
public static Key getKey() {
File file=new File("E:\\key.txt");
try {
if(file.exists()){
Key key =MacProvider.generateKey(SignatureAlgorithm.HS512);
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(file));
oo.writeObject(key);
oo.close();
return key;
}
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
ois.close();
Key key= (Key) ois.readObject();
return key;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
}
}
// @Test
// public void test() throws Exception {
// getKey();
// }
}
运行TokenUtils可以看到结果,当客户端收到token时可以将一些参数放在本地,当token过期之后,可以通过一些参数(如subject)去服务器重新获取token,
- JsonWEBtokens生成
- java生成密码生成
- php生成pdf生成
- qrcode生成,二维码生成
- 生成、重新生成、清理
- 生成直方图
- 生成助记码
- 生成随机数
- 生成日历
- 生成xml
- 生成校验码
- 生成HTML
- 生成订单号
- 生成缩略图
- 生成条形码
- 生成缩略图
- 生成HTML
- 生成组件
- 内省操作JavaBean
- Java 多态:动态绑定 及 内部实现机制
- <dl>定义列表
- CSDN的MarkDown语法知识
- 博客笔记161207(java操作execl)
- JsonWEBtokens生成
- windows核心编程-信号量内核对象
- 【EJB】——EJB宏观总结
- redis点滴(四) redis持久化
- 获取手机ip
- Javascript之匿名函数
- 随机生成8位数授权码
- bzoj1195: [HNOI2006]最短母串
- Java UDP封装类