简介
全称:JSON Web Token (https://jwt.io/)
定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。
组成: 第一部分:Header(头), 记录令牌类型、签名算法等。 例如:{"alg":"HS256","type":"JWT"}
第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。 例如:{"id":"1","username":"Tom"}
第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。
jwt生成
<!-- 令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
jwt生成
public void jwt(){
Map<String,Object> clams=new HashMap<>();
clams.put("id",1);
clams.put("itheri","mewa");
String jwt = Jwts.builder()
.signWith(SignatureAlgorithm.HS256,"itheima")//签名算法
.setClaims(clams)//自定义内容(载荷)
.setExpiration(new Date(System.currentTimeMillis()+3600*1000))//设置有效期
.compact();//可以拿到字符串
System.out.println(jwt);
}
jwt解析
public void testParseJwt(){
Claims claims=Jwts.parser()//解析
.setSigningKey("itheima")//签名密钥
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjk3MTY3NTQwLCJpdGhlcmkiOiJtZXdhIn0.jNl1gTlp5pgpAdihwsFPI0S5h5etXQsW7az5YvToof8")
.getBody();//自定义内容第二部分的
System.out.println(claims);
}
官网解析或者base64解析工具
https://jwt.io/
登录校验
@Slf4j
@RestController
public class LoginController {
@Autowired
private EmpService empService;
@PostMapping("/login")
public Result login(@RequestBody Emp emp){
log.info("会员登陆"+emp);
Emp e=empService.login(emp);
if(e != null){
Map<String , Object> claim=new HashMap<>();
claim.put("id",e.getId());
claim.put("name",e.getName());
claim.put("Username",e.getUsername());
String jwt= JwtUtils.generateJwt(claim);
return Result.success(jwt);
}
return Result.error("用户名或密码错误");
}
}