栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot——JWTtoken

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot——JWTtoken

1.JWT

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

2.优点

1.无状态
2.有效避免了CSRF 攻击(跨站请求伪造,属于网络攻击领域范围)
3.适合移动端应用
4.单点登录友好(SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。)

@Slf4j
public class JwtUtil {


    //过期时间 30min
    private static final int EXPIRE_TIME = 30;
    //私钥
    private static final String TOKEN_SECRET = "privateKey";
    //可以自定义

    
    public static String createToken(Long userId,List authStrList) {

        // 算出一个超时的时间
        Calendar nowTime = Calendar.getInstance();
        nowTime.add(Calendar.MINUTE,EXPIRE_TIME);
        Date expiresDate = nowTime.getTime();

        return JWT.create()
                .withAudience(userId+"")   //签发对象
                .withIssuedAt(new Date())    //发行时间
                .withExpiresAt(expiresDate)  //有效时间
                // authStrList=> 转json 存储   => 尝试fastjson(阿里开源的一个json转化工具)
//                .withClaim(USER_NAME, userName)    //载荷,随便写几个都可以
                .sign(Algorithm.HMAC256(userId+TOKEN_SECRET));   //加密
    }
    
    public static boolean verifyToken(String token, String secret){
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret+TOKEN_SECRET)).build();
            verifier.verify(token);
        } catch (Exception e) {
            //效验失败
            //自定义的一个异常
            log.error("token校验失败",e);
            return false;
        }
        return true;
    }
    
    public static String getAudience(String token){
        String audience = null;
        try {
            audience = JWT.decode(token).getAudience().get(0);
        } catch (JWTDecodeException j) {
            //这里是token解析失败
            log.error("token解析失败",j);
            return null;
        }
        return audience;
    }

    
    public static List getClaim(String token, String key){
        try {
            Claim claim = JWT.decode(token).getClaim("key");
            // 转化成对应类型  。。。

        } catch (JWTDecodeException j) {
            //这里是token解析失败
            log.error("token解析失败",j);
            return null;
        }
        return null;
    }

}

3.使用

在登录controller中,其中要注意你的user必须有token这个属性

  // 视图字段:用户令牌信息
    @TableField(exist=false)
    private String token;
    // 视图字段:权限信息
     @TableField(exist=false)
    private List authStrList;

        List authStrList = userService.getAuthStrListByUserId(userDb.getId());
        // 权限信息存储到用户信息中
        userDb.setAuthStrList(authStrList);
        String token = JwtUtil.createToken(userDb.getId(),authStrList);
        userDb.setToken(token);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号