springboot jwt工具类以及用法

jwt是目前最常用的,也有些技术人员不用jwt存储,而是用redis做存储,因为jwt可以存储多个相同的key,这样导致安全的问题,还有无法删除jwt存储值。

当然如果不想用redis的话也可以将token存数据库里,登录的时候修改token也是可以的,不过就是有点太耗资源了。

生成token干嘛用呢?这个时候就需要配置springboot拦截器了,前端Ajax请求头header的时候可以通过springboot拦截判断有没有存储值,这里就不写了。

pom.xml配置

<!--jwt-->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.2.0</version> <!--设置最新版本,目前3.2.0-->
</dependency>

JWT工具类

public class JWTUtil {
    //密钥
    public static String TOKEN = "ken!Q%&(DSA*%#@";

    /**
     * 生成token
     * @return
     */
    public static String getToken(Map<String, String> map){
        try {
            //设置令牌过期时间 天为单位
            Calendar instance = Calendar.getInstance();
            //设置7天过期
            instance.add(Calendar.DATE, 7);
            //创建JWT builder
            JWTCreator.Builder builder = JWT.create();
            //payload(存储多个值)
            map.forEach((k, v)->{
                builder.withClaim(k, v);
            });
            String token = JWT.create()
                    .withExpiresAt(instance.getTime())    //令牌过期时间
                    .sign(Algorithm.HMAC256(TOKEN)); //签名密钥
            return token;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取token信息方法
     * @param token
     * @return
     */
    public static DecodedJWT getTokenInfo(String token){
        try {
            DecodedJWT verify = JWT.require(Algorithm.HMAC256(TOKEN)).build().verify(token);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

}

登录使用

@RestController
public class AdminController {

    @GetMapping("login")
    public Map<String, Object> admin(String username, String password){
        Map<String, Object> map = new HashMap<>();
        try {
            //写入数据库账号密码,这里我不写了

            Map<String, String> payload = new HashMap<>();
            payload.put("username", username);      //可put多个参数
            //生成token
            String token = JWTUtil.getToken(payload);

            //设置返回值
            map.put("msg", "认证成功");
            map.put("state", true);
            map.put("token", token);

        }catch (Exception e){
            map.put("state", false);
            map.put("msg", e.getMessage());
        }

        return map;
    }

}

如果是需要做认证的话,就直接这样写就能获取到了

JWTUtil.getTokenInfo("token值").getClaim("username").asString();
本站资源除特别声明外,转载文章请声明文章出处
东泰博客 » springboot jwt工具类以及用法

发表评论