java中jwt的使用,包括token生成和验证

java中jwt的使用,包括token生成和验证


首先需要导入依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

token的生成和验证

public class JwtUtils {
    
    

    public static final long EXPIRE = 1000 * 60 * 60 * 24;      //token过期时间
    public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";  // 密钥

    //生成token字符串的方法
    public static String getJwtToken(String username, String password){
    
    

        String JwtToken = Jwts.builder()
                .setHeaderParam("typ", "JWT")
                .setHeaderParam("alg", "HS256")

                .setSubject("guli-user")
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))

                .claim("username", username)
                .claim("password", password)  //设置主体部分,存储用户信息

                .signWith(SignatureAlgorithm.HS256, APP_SECRET)  //签名哈希
                .compact();

        return JwtToken;
    }

    /**
     * 判断token是否存在与有效
     * @param jwtToken
     * @return
     */
    public static boolean checkToken(String jwtToken) {
    
    
        if(StringUtils.isEmpty(jwtToken)) return false;
        try {
    
    
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
    
    
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 判断token是否存在与有效
     * @param request
     * @return
     */
    public static boolean checkToken(HttpServletRequest request) {
    
    
        try {
    
    
            String jwtToken = request.getHeader("token");
            if(StringUtils.isEmpty(jwtToken)) return false;
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
    
    
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 根据token获取用户信息
     * @param request
     * @return
     */
    public static String getUserNameByJwtToken(HttpServletRequest request) {
    
    
        String jwtToken = request.getHeader("token");
        if(StringUtils.isEmpty(jwtToken)) return "";
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("username");
    }
    
    /**
     * 根据token获取用户信息
     * @param request
     * @return
     */
    public static String getUserNameByJwtToken(String jwtToken ) {
    
    
        if(StringUtils.isEmpty(jwtToken)) return "";
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("username");
    }

    public static void main(String[] args) {
    
    
        String token = getJwtToken("admin","admin");
        checkToken(token);
        getUserIdByJwtToken(token);
    }
}

在进行测试的时候有可能会出现如下问题

java.lang.classnotfoundexception:javax.xml.bind.DatatypeConverter

这是因为jdk8以上的版本不包含javax.xml.bind,可以降低jdk版本,或者手动导入该jar包

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

猜你喜欢

转载自blog.csdn.net/weixin_42684368/article/details/132736811
今日推荐