首页 > 其他分享 >jwt生成token及拦截器解析token

jwt生成token及拦截器解析token

时间:2023-11-01 23:12:38浏览次数:45  
标签:拦截器 ResultVo jwt response token new import resultVo

添加依赖

        <!--jwt加密-->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>    

生成token核心代码

          //生成token
                JwtBuilder builder = Jwts.builder();
                String token = builder.setSubject(username)   //主题,就是token中携带的数据
                        .setIssuedAt(new Date())  //创建时间
                        .setId(users.get(0).getUserId() + "")  //设置用户id为token id
                        .setClaims(new HashMap() {{

                        }}) //map可以存放用户角色 权限信息
                        .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000)) //设置过期时间
                        .signWith(SignatureAlgorithm.HS256, "caowei666") //设置加密算法 和 密码
                        .compact();

自定义校验token拦截器

import com.fasterxml.jackson.databind.ObjectMapper;
import com.qfedu.fmmall.vo.ResultVo;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Component
public class CheckTokenInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //前端header中如果有自定义值则会执行预检请求
        if(request.getMethod().equalsIgnoreCase("options")) {
            return true;
        }
        String token = request.getHeader("token");
        if(token == null) {
            //提示请先登录
            ResultVo resultVo = new ResultVo(401, "请先登录!", null);
            doResponse(response, resultVo);
            return false;
        }else {
            try {
                //解析token
                JwtParser parser = Jwts.parser();
                parser.setSigningKey("caowei666");

                //如果token正确(密码正确,有效期内)则不会报异常
                Jws<Claims> claimsJws = parser.parseClaimsJws(token);
                return true;

            }catch (ExpiredJwtException e) {
                ResultVo resultVo = new ResultVo(401, "登录过期!", null);
                doResponse(response, resultVo);
            }catch (UnsupportedJwtException e){
                ResultVo resultVo = new ResultVo(401, "token不合法!", null);
                doResponse(response, resultVo);

            }catch (Exception e){
                ResultVo resultVo = new ResultVo(401, "请先登录!", null);
                doResponse(response, resultVo);
            }
            return  false;
        }
    }

    private void doResponse(HttpServletResponse response, ResultVo resultVo) throws IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter();
        String s = new ObjectMapper().writeValueAsString(resultVo);
        writer.print(s);
        writer.flush();
        writer.close();
    }
}

注册拦截器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    private CheckTokenInterceptor checkTokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(checkTokenInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/user/**");
    }
}

 

标签:拦截器,ResultVo,jwt,response,token,new,import,resultVo
From: https://www.cnblogs.com/wscw/p/17804372.html

相关文章

  • 修改token有效期工具 Another Redis Desktop Manager
     1、获取到redis的host和密码登录2、根据要使用的token查询出数据,修改TTL字段值未-1保存即可。 ......
  • Django实战项目-学习任务系统-自定义URL拦截器
    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题。Django框架本身也有URL拦截器,但是因为本系统用户模型跟Django框架本身用户模型不匹配,所以没有用,......
  • React Native在非组件的地方使用页面跳转(interceptors拦截器处跳转页面)
    官方文档:https://reactnavigation.org/docs/navigating-without-navigation-prop/修改APP.jsimport{NavigationContainer}from'@react-navigation/native';import{navigationRef}from'./RootNavigation';exportdefaultfunctionApp(){r......
  • 整合satoken鉴权
    依赖<!--核心库--><dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.20.0</version></dependency><!--用Redis缓存授权信息--><dependency> &l......
  • 接口幂等性解决方案:基于token实现接口幂等的落地实现
    文章目录一、什么是幂等二、基于token方案解决接口幂等问题1、token机制方案介绍(1)实现思路(2)问题:先执行业务再删除token(3)问题:先删除token再执行业务(4)方案缺点2、基于自定义业务流程实现(1)获取token接口(2)订单服务新增feign拦截器(3)定义生成订单方法(4)测试3、基于自定义注解实现(1)自定义......
  • 使用【注解】加【拦截器】实现权限控制
    前面介绍了使用SpringSecurity进行权限控制,其中一个非常方便的特点就是:可以在类和方法上使用注解,从而实现对资源访问的权限控制。但是SpringSecurity具有一定的学习成本和复杂度,想要灵活驾驭并用好框架并非一件容易的事情,比如跟其它系统进行单点登录集成等等。本篇博客介绍......
  • 视频汇聚平台EasyCVR分发的流如何进行token鉴权?具体步骤是什么?
    视频监控EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTT......
  • Springboot拦截器的使用
    1.拦截器(Interceptor)在SpringBoot中,拦截器是基于SpringMVC框架的一部分,主要用于对控制器方法进行拦截处理。拦截器是通过实现HandlerInterceptor接口来定义的其中包括三个主要方法:preHandle、postHandle和afterCompletion。1.preHandle方法在进入控制器方法之前执行2.postHan......
  • Token vs 单词
    要让LLMs(LargeLanguageModels,大型语言模型)生成文字,首先得让它们“懂”单词。单词首先会被拆分为Tokens(一种能够被编码的基础单元)。在不同的语言模型和分词系统中,Token的定义和分割方法可能会有所不同。绝大多数情况下,一个单词对应一个Token,但是也有很多情况不能一一对应。......
  • 用go封装一下临时token
    用go封装一下临时token本篇为用go设计开发一个自己的轻量级登录库/框架吧的临时token篇,会讲讲临时token的实现,给库/框架增加新的功能。Github:https://github.com/weloe/token-go临时token也算是比较常见的业务,例如登录验证码信息,邀请链接等等,都属于临时token的范畴。在token-......