Spring Boot整合JWT实现
1、写在前面
什么是JWT
JWT(Json Web Token),是一种工具,格式为XXXX.XXXX.XXXX的字符串,JWT以一种安全的方式在用户和服务器之间 传递存放在JWT中的不敏感信息。https://jwt.io/ 可以解析你的生成字符串(token)
jwt是怎么组成
https://juejin.im/post/5bbff9f7e51d450e8b1404c4 人家写的超级棒,可以去看看! 估计很多同学和我 一样只想代码实现,至于原理也只会慢慢来理解,所以废话不多说!
2、代码
引用:
<!--jwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
<!--阿里 FastJson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
2、JwtUtils
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.api.client.json.Json;
import io.jsonwebtoken.*;
import javax.servlet.ServletException;
import java.util.*;
final static String base64EncodedSecretKey = "base64EncodedSecretKey";//私钥final
public static String getToken(String userName, long TOKEN_EXP) {
if (TOKEN_EXP == 0) {
TOKEN_EXP = 1000 * 60 * 60;
}
return Jwts.builder()
.setSubject(userName)
.claim("username", userName)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + TOKEN_EXP)) /*过期时间*/
.signWith(SignatureAlgorithm.HS256, base64EncodedSecretKey)
.compact();
}
public static String getTokenByMap(Map<String, Object> var1, Date expDate) {
return Jwts.builder()
.setClaims(var1)
.setIssuedAt(new Date())
.setExpiration(expDate) /*过期时间*/
.signWith(SignatureAlgorithm.HS256, base64EncodedSecretKey)
.compact();
}
//解析token
public static JSONObject checkToken(String token) throws ServletException {
boolean success = false;
Claims claims = null;
String msg = null;
try {
// claims 可以得到你额外得到的值
claims = Jwts.parser().setSigningKey(base64EncodedSecretKey).parseClaimsJws(token).getBody();
} catch (ExpiredJwtException e1) {
msg = "token已经过期";
e1.printStackTrace();
} catch (Exception e) {
msg = "无效token";
e.printStackTrace();
}
Map<String, Object> reusltMap = new HashMap<>();
if (claims != null) {
success = true;
msg = "解析成功";
}
reusltMap.put("success", success);
reusltMap.put("msg", msg);
reusltMap.put("data", claims);
return JSONObject.parseObject(JSON.toJSONString(reusltMap));
}
3、代码完毕!
总结:
怎么使用就要看你具体的业务,你可以随便改成数据形式,看你怎么方便! 怎么调用????好好学习,天天向上!
getToken("hahah", 30);
Map<String, Object> map = new HashMap<>();
map.put("userid", 1);
getTokenByMap(map, new Date());
try {
checkToken(getTokenByMap(map, new Date()));
} catch (ServletException e) {
e.printStackTrace();
}