在使用之前先引入依赖(最新的版本可以到 4.4.0)
Gradle
implementation("com.auth0:java-jwt:4.0.0")
Maven
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.0.0</version>
</dependency>
application.yml
加密算法:自己设置一个复杂的格式
过期时间:设置一个过期时间
jwt:
# 加密算法
secret: csdnaa192837192873^^&^&^&^&^jalskdjflaksdjfalskdsadf
# 过期时间毫秒 7天
expire: 604800000
kotlin
// 加密
@Value("\${jwt.secret}")
private val SECRET: String? = null
// 过期时间
@Value("\${jwt.expire}")
private val EXPIRE_TIME: Long = 0
1.生成token
登录接口传zhangHao、miMa,保存一个Map
/**
* 生成token
*
* @param map
* @return
*/
fun createToken(map: Map<String, String>): String {
return JWT.create()
.withClaim("zhangHao", map["zhangHao"])
.withClaim("miMa", map["miMa"])
.withExpiresAt(Date(System.currentTimeMillis() + EXPIRE_TIME))
.sign(Algorithm.HMAC256(SECRET))
}
java简化
public static String createToken(Admin admin){
String token = JWT.create()
.withClaim("password",admin.getPassword() )
.withClaim("username", admin.getUsername())
.withClaim("id",admin.getId() )
.withExpiresAt(new Date(System.currentTimeMillis()+604800000))
.sign(Algorithm.HMAC256("sfasagsg"));
}
2. 验证token
传入token ,验证token成功后解析返回map
/**
* 验证token
*
* @param token
* @return
*/
fun verifyToken(token: String): Map<String, Claim>? {
val verifier: JWTVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build()
try {
val jwt: DecodedJWT = verifier.verify(token)
return jwt.claims
} catch (e: Exception) {
log.info("token验证失败:{}", e.message)
}
return null
}
java简化
public static Admin verifyToken(String token){
JWTVerifier jwt = JWT.require(Algorithm.HMAC256("sfasagsg")).build();
DecodedJWT map = jwt.verify(token);
Admin result = new Admin();
result.setId(map.getClaim("id").asInt());
result.setPassword(map.getClaim("password").asString());
result.setUsername(map.getClaim("username").asString());
return result;
}
3.密码加密
密码加密:Base64 ——》MD5 加密
kotlin
// 密码加密 转Base64后在md5加密 不可逆
fun String.toPassword(): String {
// Base64
val base64 = Base64.getEncoder().encodeToString(this.toByteArray())
val md5 = base64.hashCode().toString() + base64
return md5
}
java
public static String toPassword(String password){
String s = DigestUtils.md5DigestAsHex((password).getBytes());
return s.hashCode()+"asfbsef";
}