JWT实现身份认证

    1、什么是JWT

    JSONWebtoken(JWT)是一种开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。可以验证和信任此信息,因为它是数字签名的。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥进行签名。

    2、为什么要使用JWT

    通过相同的密钥的加解密操作,能够很方便的在集群部署网站中轻松实现sso(单点登录)。同时不需要持久化操作,简单易用。

    3、如何使用JWT

    JWT包含三部分内容:header、playload、signature。header包含jwt的类型和加密算法,playload主要是我们允许在token中传递的部分参数,password等安全要求高的不要放在里面。signature是签名的内容。

    我们在使用中需要创建一个JWT工具类,用来对登陆用户进行加密,通过token的解密来进行认证。

 

public class JwtUtils {


    public static final String SUBJECT = "test";

    public static final long EXPIRE = 1000*60*60*24*7;  //过期时间,毫秒,一周

    //秘钥,可写在配置文件中
    public static final  String APPSECRET = "test14631462";

    /**
     * 生成jwt
     * @param user
     * @return
     */
    public static String geneJsonWebToken(User user){

        if(user == null || user.getId() == null || user.getName() == null){
            return null;
        }
        //根据业务需求确定claims中所放数据,如不必要:密码尽量不要放在jwt中传输
        String token = Jwts.builder().setSubject(SUBJECT)
                .claim("id",user.getId())
                .claim("name",user.getName())
                .claim("img",user.getHeadImg())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE))
                .signWith(SignatureAlgorithm.HS256,APPSECRET).compact();

        return token;
    }


    /**
     * 校验token
     * @param token
     * @return
     */
    public static Claims checkJWT(String token ){

        try{
            final Claims claims =  Jwts.parser().setSigningKey(APPSECRET).
                    parseClaimsJws(token).getBody();
            return  claims;

        }catch (Exception e){ }
        return null;
    }
}

 

posted @ 2026-03-13 08:56  走在学习的路上  阅读(5)  评论(0)    收藏  举报