首页 > 其他分享 >登录拦截器校验JWT

登录拦截器校验JWT

时间:2023-09-09 16:58:32浏览次数:40  
标签:拦截器 request JWT 校验 toString import claims com public

import com.alibaba.csp.sentinel.util.StringUtil;
import com.xtw.enums.BizCodeEnum;
import com.xtw.model.LoginUser;
import com.xtw.util.CommonUtil;
import com.xtw.util.JWTUtil;
import com.xtw.util.JsonData;
import io.jsonwebtoken.Claims;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>();
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (HttpMethod.OPTIONS.toString().equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpStatus.NO_CONTENT.value());
            return true;
        }
        String accessToken = request.getHeader("token");
        if(StringUtil.isBlank(accessToken)){
            accessToken = request.getParameter("token");
        }
        Claims claims = JWTUtil.checkJWT(accessToken);
        if(claims == null){
            // 未登录
            CommonUtil.sendJsonMessage(response, JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN));
            return false;
        }
        Long account_no = Long.parseLong(claims.get("account_no").toString());
        String username = claims.get("username").toString();
        String pwd = claims.get("pwd").toString();
        String phone = claims.get("phone").toString();
        String email = claims.get("email").toString();
        System.out.println(pwd+""+email);

        LoginUser loginUser = LoginUser.builder()
                .accountNo(account_no)
                .pwd(pwd)
                .userName(username)
                .phone(phone)
                .email(email).build();

        threadLocal.set(loginUser);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        threadLocal.remove();
    }
}

配置拦截接口

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                //添加拦截的路径
                .addPathPatterns("/FileUpload/upload")
                //排除拦截路径
                .excludePathPatterns("/register/*","/jwt/token","/jwt/checkJWT");
    }
}

标签:拦截器,request,JWT,校验,toString,import,claims,com,public
From: https://www.cnblogs.com/xietingwei/p/17689708.html

相关文章

  • 接口文档、jwt介绍和构成、jwt签发和认证、base64编码、drf-jwt编码、drf-jwt使用
    接口文档作为后端,接口写好了,需要编写接口文档作为前端,需要使用后端写的接口(移动端、web桌面端),可以照着接口文档写接口文档的展现形式:1.word、md,写好传到公司的某个平台===》前端可以下载使用2.自动生成接口文档===》后端通过配置===》把所写的接口都自动生成===》......
  • JWT
    1.介绍Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源......
  • jwt介绍和构成
    一、jwt介绍和构成1、jwt:JsonWebToken:web方向的token认证方案#做会话保持的发展历史 -https://www.cnblogs.com/liuqingzheng/p/8990027.html#jwt:JsonWebToken:web方向的token认证方案#在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token......
  • 接口文档,jwt介绍和构成,jwt签发与认证,base64编码,drf-jwt使用,django-rest-framewor
    1接口文档#作为后端,接口写好了#作为前端,需要使用我们写的接口(移动端,web,桌面端)#后端需要写接口文档#接口文档的展现形式: 1word,md,写好传到公司的某个平台---》前端可以下载2自动生成接口文档---》后端通过配置--》把所写的接口都自动生成---》地址--》访问......
  • drf-jwt使用
    一、jwt介绍和构成1.介绍jwt:JsonWebToken,Web方向的Token认证方案在用户注册或登录之后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token串)。我们不再使用session认证机制,而使用JsonWebToken(本质就是token)认证机制。JsonWebToken:JWT用在我们前后端......
  • 大文件 MD5 SHA 校验时间优化之路
    最近研发apk校验服务,很多游戏安装包两三个G,如果整个拿去校验,耗时基本二十多秒,这还仅仅是校验的时间,如果加上下载的时间,等待时间太长了网上很多方案尝试了一下,不太行1、fastmd5一个第三方库,csdn有人用过说可以提升40%的速度,然后我去试了一下,本来9秒可以完成的校验,变成了2分多钟......
  • 接口文档、jwt
    接口文档作为后端,接口写好了作为前端,需要使用我们写的接口(移动端、web、桌面端)后端需要写接口文档接口文档的展现形式:1、word,md,写好传到公司的某个平台,前端可以下载2、自动生成接口文档,后端通过配置,把所写的接口都自动生成,一个地址访问这个地址就能看到所有接口文档......
  • 循环冗余校验(CRC)算法入门引导
    写给嵌入式程序员的循环冗余校验(CRC)算法入门引导前言CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,......
  • jwt和token的区别
    (目录)jwt和token的区别两者区别Token和JWT(JSONWebToken)是两种常见的身份验证机制,它们有以下区别:格式Token是一个字符串,通常包含了用户的身份信息和其他相关信息,例如用户ID、过期时间等。而JWT是一种特定的Token格式,它使用JSON对象来存储这些信息,并使用Base64编码进行传输......
  • GIN 接入JWT
    GIN,JWT下载地址github地址:https://github.com/golang-jwt/jwt文档地址:https://pkg.go.dev/github.com/golang-jwt/jwt下载:gogetgithub.com/golang-jwt/jwtpackagemainimport("github.com/gin-gonic/gin""github.com/golang-jwt/jwt""net/ht......