自定义拦截器处理token

目录

1、WebConfig 配置类

 2、TSUserContext 把用户信息放到context中

3、自定义拦截器 

4、在controller中可以使用

5、参考链接


1、WebConfig 配置类

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private AccessControlInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册自定义拦截器LoginInterceptor
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")  // 拦截所有的请求
                .excludePathPatterns("/","/images/**");//排除指定请求
    }
}

 2、TSUserContext 把用户信息放到context中

@Component
public class TSUserContext {
    private static final String ACCESS_TOKEN = "ACCESS_TOKEN";

    public void setCurrentUser(TSUser user) {
        RequestContextHolder.currentRequestAttributes().setAttribute(ACCESS_TOKEN, user, RequestAttributes.SCOPE_REQUEST);
    }

    public TSUser getCurrentUser() {
        return (TSUser) RequestContextHolder.currentRequestAttributes().getAttribute(ACCESS_TOKEN, RequestAttributes.SCOPE_REQUEST);
    }
}

3、自定义拦截器 

@Component
public class AccessControlInterceptor implements HandlerInterceptor {
    @Value("${TOKEN_SECRET}")
    private String TOKEN_SECRET;
    @Resource
    private TSUserContext userContext;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取用户信息
        TSUser tsUser = TokenProccessor.getInstance().verifyToken(request.getHeader("access_token"), TOKEN_SECRET);

        if (tsUser == null) { // 没有获取到用户信息
            // 设置响应状态码为 401
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            // 设置响应内容为 JSON 格式的错误信息
            String errorMessage = "{\"error\": \"access_token 已经失效,请重新登录\"}";
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(errorMessage);
            return false; // 验证失败,不继续处理请求

        } else {
            Class clazz = Class.forName("com.ggzy.support.context.TSUser");
            com.ggzy.support.context.TSUser user = (com.ggzy.support.context.TSUser) clazz.getDeclaredConstructor().newInstance();
            //com.ggzy.support.context.TSUser tsUser2 = new com.ggzy.support.context.TSUser();
            BeanUtils.copyProperties(tsUser, user);
            //设置用户信息
            userContext.setCurrentUser(user);
            return true;
        }
    }
}


4、在controller中可以使用

@RestController
public class xxController {
    @Resource
    private TSUserContext userContext;


}

5、参考链接

SpringBoot配置JWT拦截器

java 实现token登录,并进行上下文存储用户信息

为什么要使用双token

为什么你写的拦截器注入不了 Java bean? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值