@PostMapping("/login")
public Result<String> login(@Pattern(regexp ="^\\S{5,16}$" ) String username,@Pattern(regexp ="^\\S{5,16}$" ) String password){
//根据用户名查询用户
User loginUser = userService.findByUsername(username);
//判断该用户是否存在
if (loginUser == null) {
return Result.error("用户名不存在");
}
//密码是否正确 loginUser对象中的password是加密之后的
if (Md5Util.getMD5String(password).equals(loginUser.getPassword())){
return Result.success("jwt token令牌...");
}
return Result.error("密码错误");
}
为了防止在未登录的情况下,可以访问到其他资源
所以我们要开启登录认证,
使用方法如下:
代码如下:
新建一个JwtTest类 代码如下:
package com.itheima;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.junit.jupiter.api.Test;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JwtTest {
@Test
public void testGen(){
Map<String,Object> claims=new HashMap<>();
claims.put("username","李二狗");
claims.put("id",1);
//生成jwt的代码
String token= JWT.create()
.withClaim("user",claims)//添加载荷
.withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12))//添加过期时间
.sign(Algorithm.HMAC256("itheima"));//指定算法,配置密钥
System.out.println(token);
}
@Test
public void testParse(){
//定义字符串,模拟用户传来的token
String token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +
".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuadjuS6jOeLlyJ9LCJleHAiOjE3NDY0MDc0NzV9." +
"HQ0g7SiGRzXqfjtXWOfcECeBLbtforTUmHZSHB7enRs";
//
JWTVerifier jwtVerifier=JWT.require(Algorithm.HMAC256("itheima")).build();
DecodedJWT decodedJWT=jwtVerifier.verify(token);//验证token,生成一个解析后的JWT对象
Map<String, Claim>claims=decodedJWT.getClaims();
System.out.println(claims.get("user"));
//如果篡改了头部和载荷部分会验证失败
//如果密钥改了,验证失败
//token过期,也会失败
}
}
运行如下:
下期继续~~~~~