配置文件:#服务配置 server: port: 9002 #spring配置 spring: #应用配置 application: name: ynhrm-system #指定服务名 #数据库连接池 datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ynhrm?useUnicode=true&characterEncoding=utf8 username: root password: 123456 #jpa jpa: database: MySQL show-sql: true open-in-view: true
jwt: config: key: zcc-ynhrm ttl: 3600000
第一步:JWT工具类
package com.ynhrm.common.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
@Component
@ConfigurationProperties("jwt.config")
@Data
public class JWTUtils {
private String key;//签名私钥
private Long ttl;//签名失效时间
/* private String key="zcc-ynhrm";
private int ttl=3600000;*/
/**
* 设置认证token
* 参数:
* id:登陆用户id
* subject(主题):登陆用户名
*/
public String createJWT(String id, String subject, Map<String,Object> map){
//1.设置失效时间
long now=System.currentTimeMillis();//当前毫秒数
long exp=now+ttl;
//2.创建jwtBuilder
JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(subject)
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, key);
//3.通过map设置claims,指定失效时间
jwtBuilder.setClaims(map);
jwtBuilder.setExpiration(new Date(exp));
//4.创建token
String token = jwtBuilder.compact();
return token;
}
/**
* 解析token字符串获取clamis
*/
public Claims parseJWT(String token){
Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
return claims;
}
}
第二步:controller层,service,dao自己写 /** * 登陆 * 根据mobile查询用户 * 比较password * 生成token * @return */ @RequestMapping(value = "/login",method = RequestMethod.POST) public Result login(@RequestBody Map<String,String>loginMap){//因请求参数在请求体中 String mobile = loginMap.get("mobile"); String password = loginMap.get("password"); User user = userService.findUserByMobile(mobile); if (user==null||!user.getPassword().equals(password)){ return new Result(ResultCode.MOBILEORPASSWORDERROR); }else { Map<String,Object> map=new HashMap<>(); map.put("companyId",user.getCompanyId()); map.put("companyName",user.getCompanyName()); String token = jwtUtils.createJWT(user.getId(), user.getUsername(), map); return new Result(ResultCode.SUCCESS, token);//登录成功把token返回 } }
测试
@Component