美文网首页
springboot整合jwt生成token

springboot整合jwt生成token

作者: 早起的大艺术家 | 来源:发表于2023-06-07 09:11 被阅读0次

    1、引入jwt的两个依赖
    java-jwt,jjwt
    <dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.19.2</version>
    </dependency>
    <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
    </dependency>
    2、使用jwt创建token,并响应给前端

               HashMap<String, Object> map = new HashMap<>();
                map.put("username",user.getUsername());
                JwtBuilder builder = Jwts.builder();
                String token = builder.setIssuedAt(new Date())
                        .setExpiration(new Date(System.currentTimeMillis() + 1000 + 60 * 60 * 24))
                        .signWith(SignatureAlgorithm.HS256, "yogo123456")
                        .setId(user.getUserId() + "")
                        .setClaims(map)
                        .compact();
                return new ResultVO(ResultVOCode.SUCCESS,token,user);
    

    3、创建拦截器,拦截前端token
    1、前端token约定添加到header中,需要预检(OPTIONS)
    @Component
    public class CheckTokenIncepter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
        //放行预检
        String method = request.getMethod();
        if ("OPTIONS".equalsIgnoreCase(method)){
            return true;
        }
        ResultVO resultVO = new ResultVO();
        String token = request.getHeader("token");
    

    // String token = request.getParameter("token");

        if (token == null || token.length() == 0){
            resultVO.setCode(ResultVOCode.FAILER);
            resultVO.setMsg("请先登录");
            doResponse(response,resultVO);
        }else {
            JwtParser parser = Jwts.parser();
            parser.setSigningKey(ConstContent.tokenPwd);
            try {
    
                Jws<Claims> claimsJws = parser.parseClaimsJws(token);
    

    // Claims body = claimsJws.getBody();
    // String tokenParam1 = body.get(ConstContent.tokenParam1, String.class);
    // System.out.println("tokenParam1------"+tokenParam1);
    return true;
    }catch (Exception e){
    resultVO.setCode(ResultVOCode.FAILER);
    resultVO.setMsg("token失效 请先登录");
    doResponse(response,resultVO);
    }
    }
    return false;
    }

    private void doResponse(HttpServletResponse response, ResultVO resultVO){
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        try {
            PrintWriter writer = response.getWriter();
            String str = new ObjectMapper().writeValueAsString(resultVO);
            writer.print(str);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    

    }
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    private CheckTokenIncepter checkTokenIncepter;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(checkTokenIncepter)
                .addPathPatterns("/goods/**")
                .addPathPatterns("/shopCart/**")
                .excludePathPatterns("/user/**");
    }
    

    }

    相关文章

      网友评论

          本文标题:springboot整合jwt生成token

          本文链接:https://www.haomeiwen.com/subject/zggiedtx.html