1, 在common中导入jwt的包
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
2,写wjtutil工具类
public class JwtUtil {
private String key ;
private long ttl ;//一个小时
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public long getTtl() {
return ttl;
}
public void setTtl(long ttl) {
this.ttl = ttl;
}
/**
* 生成JWT
*
* @param id
* @param subject 用户名
* @return
*/
public String createJWT(String id, String subject, String roles) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder().setId(id)
.setSubject(subject)
.setIssuedAt(now)
.signWith(SignatureAlgorithm.HS256, key).claim("roles", roles);
if (ttl > 0) {
builder.setExpiration( new Date( nowMillis + ttl));
}
return builder.compact();
}
/**
* 解析JWT
* @param jwtStr
* @return
*/
public Claims parseJWT(String jwtStr){
return Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jwtStr)
.getBody();
}
}
3,填写配置文件(application.yml中)
#设置令牌的盐和过期时间为一个小时
jwt:
config:
key: wangyu
ttl: 3600000
4,把Jwtutil注入
@Bean
public JwtUtil jwtUtil(){
return new JwtUtil();
}
4,在管理员登录界面写如下代码(controller)
@RequestMapping(method = RequestMethod.POST, value = "/login")
public Result checkLogin(@RequestBody Admin admin1) {
Admin admin = adminService.findByLoginNameAndPassword(admin1.getLoginname(), admin1.getPassword());
if (admin != null) {
//生成令牌
String token = jwtUtil.createJWT(admin.getId(), admin.getLoginname(), "admin");
Map<String, Object> map = new HashMap<>();
map.put("token", token);
map.put("role", "admin");
return new Result(true, StatusCode.OK, "校验成功", map);
} else
return new Result(true, StatusCode.OK, "校验失败");
}
注意:本次生成令牌是在controller中生成的
重点:
1,json可以把map转化为json格式
2,返回给前台的是token和角色
—人心不足蛇吞象,劝君珍惜眼前人