JWT使用教程

JWT是JSON Web Token的简称,用于在各方之间安全地传递信息。本文介绍了JWT的三个组成部分:header、payload和signature,以及如何在客户端和服务器间使用token进行身份验证。文中还详细讲解了如何编写自定义拦截器并将之添加到配置中,以确保JWT的有效性和安全性。

JWT是json web token的简写,意为json格式的token。

什么是token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

组成部分

header(头部)

header的作用主要是表明Signature使用的加密算法和token的类型

Payload(负载)

用于存放我们需要校验的信息,不要存放敏感信息,譬如密码。因为header和payload只经过base64编码,并没有加密是可以获取到的

Signature(签名)

这部分由header和payload的base64编码经过服务端的秘钥(这个很关键)加密组成。当用户携带这个token访问服务端时,我们就可以进行授权验证,如果payload被修改了,验证是不会通过的

依赖

		<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

简单的工具类

public class JWTUtils {

    private static final String SIGN = "231@$#!$@";//秘钥

    //生成token
    public static String getToken(String userName,String userID){
        JWTCreator.Builder builder = JWT.create();
        builder.withClaim("username",userName);
        builder.withClaim("userID",userID);

        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE,7);//token过期时间,7天

        String token = builder.withExpiresAt(calendar.getTime())//设置token过期时间
                .sign(Algorithm.HMAC512(SIGN));//使用秘钥进行加密

        return token;
    }

    //验证token,验证不成功会抛出异常
    public static void verifierToken(String token){
        JWT.require(Algorithm.HMAC512(SIGN)).build().verify(token);
    }
}

工具类中我们并没有设置header这是因为,它有默认的。我们登录以后返回给客户端一个token,客户端可以将其设置在localStorage中或者cookie中,以后每次方法都将其携带上(推荐放在请求头中),然后后端拦截获取请求头的token,验证是否有被篡改,如果没有就放行

编写自定义拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        try{
        	//验证是否不正确,不正确会抛出异常
            JWTUtils.verifierToken(token);
            return true;
        }catch (Exception e){
            response.getWriter().print("error token");
        }
        return false;
    }
}

将自定义拦截器添加至配置中

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/user/**")//拦截的请求
                .excludePathPatterns("/login/**");//放行的请求
    }
}

至此jwt的简单使用就结束了,Controller正常编写即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值