分布式应用的登录检验解决方案 ——JWT

DBC 1.7K 0
加入相关依赖
    <!-- JWT相关 -->
    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.7.0</version>
    </dependency>
创建一个工具类JWT
package com.example.demo.tools;

import com.example.demo.model.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * JWT工具类
 * 1.生成的token,是可以通过base64进行解密初明文信息
 * 2.base64进行解密初明文信息,修改再进行编码,则会解密失败
 * 3.无法作废已颁布的token,除非改秘钥
 */
public class JWTUtils {

    /**
     * 过期时间:一周
     */
    private static final long EXPIRE = 60000 * 60 * 24 * 7;
    /**
     * 秘钥
     */
    private static final String SECRET = "mll.dbc";

    /**
     * 令牌前缀
     */
    private static final String TOKEN_PREFIX = "mll";

    /**
     * 谁颁布的
     */
    private static final String SUBJECT = "mll";

    /**
     * 生成令牌
     * @param user
     * @return
     */
    public static String genJsonWebToken(User user) {
        String token = Jwts.builder().setSubject(SUBJECT)
                .claim("head_img",user.getImg())
                .claim("id",user.getId())
                .claim("phone",user.getPhone())
                .setIssuedAt(new Date())
                //当前时间
                .setExpiration(new Date())
                //过期时间
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE))
                //加密方式
                .signWith(SignatureAlgorithm.HS256,SECRET).compact();

        token = TOKEN_PREFIX+token;


        return token;
    }


    /**
     * 校验JWT方法
     * @param token
     * @return
     */
    public static Claims checkJWT(String token){
        try {
            Claims claims =  Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token.replace(TOKEN_PREFIX,"")).getBody();
            return claims;
        }catch (Exception e){
            return null;
        }

    }


}
搞一个测试类给你看看 test2
    @Test
    public void test2(){
        User user = new User();
        user.setPhone("15907826081");
        user.setImg("654684");
        user.setId(2);
        String token = JWTUtils.genJsonWebToken(user);
        System.out.println(token);
        Claims claims = JWTUtils.checkJWT(token);
        System.out.println(claims.get("head_img"));
        System.out.println(claims.get("id"));
        System.out.println(claims.get("phone"));
    }
输出内容
最后搞一个接口代码给你看!
    @PostMapping("register")
    public String register(@RequestBody User user){
        System.out.println(user.getPhone());
        System.out.println(user.getId());
        System.out.println(user.getImg());
        String token = JWTUtils.genJsonWebToken(user);
        return token;
    }
    @PostMapping("login")
    public HashMap login(@RequestBody User user){
        Claims claims = JWTUtils.checkJWT(user.getToken());
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("head_img", (String) claims.get("head_img"));
        map.put("id", (Integer) claims.get("id")+"");
        map.put("phone", (String) claims.get("phone"));
        return map;
    }

发表评论 取消回复
表情 图片 链接 代码

分享