1.导入依赖
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
2.写工具类
package com.example.demo2.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtils {
//7天有效期
private static long expire = 604800;
private static String secret = "asdasdasdjijjiiikklkkkkk";
//32位秘钥
// 生成Token
public static String generateToken(String username){
Date now = new Date();
Date expiration = new Date(now.getTime() + 1000 * expire);
return Jwts.builder()
.setHeaderParam("type","JWT")
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS512,secret)
.compact();
}
public static Claims getClaimsByToken(String token){
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}
}
package com.example.demo2.utils;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
public class Result {
//是否成功
private Boolean success;
//状态码
private Integer code;
private String message;
private Map<String,Object> data = new HashMap<>();
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Map<String, Object> getData() {
return data;
}
public void setData(Map<String, Object> data) {
this.data = data;
}
private Result(){}
public static Result ok(){
Result r = new Result();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
public static Result error(){
Result r = new Result();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public Result success(Boolean success){
this.setSuccess(success);
return this;
}
public Result message(String message){
this.setMessage(message);
return this;
}
public Result data(Map<String, Object> map){
this.setData(map);
return this;
}
public Result data(String key,Object value){
this.data.put(key,value);
return this;
}
}
package com.example.demo2.utils;
public interface ResultCode {
public static Integer SUCCESS = 20000;//成功
public static Integer ERROR = 20001;//失败
}
2.编写token相关接口
package com.example.demo2.controller; import com.example.demo2.entity.Admin; import com.example.demo2.utils.JwtUtils; import com.example.demo2.utils.Result; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @CrossOrigin public class AdminController { @RequestMapping("/login") // @RequestBody 前端必须传输json格式的数据 public Result login(Admin admin){ String token = JwtUtils.generateToken(admin.getAdminUsername()); return Result.ok().data("token",token); } @RequestMapping("/info") public Result info(String token){ String username = JwtUtils.getClaimsByToken(token).getSubject(); return Result.ok().data("name",username); } @RequestMapping("/logout") public Result logout(){ return Result.ok(); } }