JWT

本文详细介绍了JWT(JSON Web Token)在SpringBoot后端和Vue前端的实现过程。后端涉及JWT工具类的创建、用户登录时token的生成与保存、自定义拦截器的注册与验证。前端部分包括获取并保存token、设置请求拦截器添加token、响应拦截器处理401错误,以及JWT的解码与验证。整个流程确保了用户登录后的接口访问安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
一.springboot后端
1.导入依赖

       <!--jwt-->
       <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

2.工具类:生成token和认证token

utils–JwtUtil:生成和验证token时传入的参数key必须完全相同,当然可以不使用key,只是用盐值进行加密。这三个参数只有过期时间是必要的。

public class JwtUtil {

    private static String sign = "¥g%)0*&fkgn4646"; //盐值

    //生成token(传入参数主要是为了能够自定义):参数1 token对谁使用,参数2 token过期时间,参数3 加密盐值
    public static String getToken(String audience, int expiresAt, String key, @Nullable Map<String,String> map) {
        Date nowDate = new Date();
        String token = JWT.create()
                .withAudience("TOKEN_AUDIENCE" + audience)
                .withIssuer("TOKEN_ISSUER") //签名由谁生成
                .withSubject("TOKEN_SUBJECT") //签名的主题
                .withIssuedAt(nowDate) //生成签名的时间
                .withExpiresAt(new Date(nowDate.getTime() + expiresAt))//这里设置(签名)过期时间
                .sign(Algorithm.HMAC256(sign + key));//签名 Algorithm:加密方式
        return token;
    }

    //验证token
    public static void verifyToken(String token, String key) {
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(sign + key)).build();
        jwtVerifier.verify(token);
    }
}

3.在用户登录成功的时候生成token,保存到redis,返回前端

controller的登录接口中调用了

LoginVo loginVo=userService.login(username, SecretUtil.desEncrypt(password));
返回值放入mapmap.put("loginInfo",loginVo.getData());

  @RequestMapping(value = "/login",method = RequestMethod.POST)
    @ResponseBody
    public Message login(String username, String password){
        LoginVo loginVo=userService.login(username, SecretUtil.desEncrypt(password));
        if(user!=null){
            //将用户的身份和权限封装为map返回前端
            Map map=new HashMap();
            map.put("loginInfo",loginVo.getData());        
            return onSuccess(map);
        }else{
            return onError(MessageConstant.MESSAGE_ERROR);
        }
    }

返回值由业务层处理

 @Override
    public LoginVo login(String username, String password) {
        LoginVo loginVo=new LoginVo();
        User user=userMapper.login(username,password);
        if(user==null){
            loginVo.setResult(false);
            loginVo.setMessage("账号不存在");
        }else{
            if(password.equals(user.getUser_pwd())){
                //使用工具类生成token
                String token= JwtUtil.getToken(user.getUsername(),60*60*24*1000,user.getUser_pwd(),payload);
               //将登录的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值