jwt认证登录

配置文件:#服务配置
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
原文地址:https://www.cnblogs.com/yscec/p/11903621.html