jwt完成管理员登录流程

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和角色

—人心不足蛇吞象,劝君珍惜眼前人

猜你喜欢

转载自blog.csdn.net/qq_41346335/article/details/86680646
今日推荐