springboot拦截器@resource注解注入为null解决方案

为什么@resource注入为null

inteceptor在springcontext之前加载,注入必然是null

解决方案

加入注解@Bean

@Configuration
public class WebMVCInterceptor implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(globalInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/userInfo/jwtUser") //登录页
                .excludePathPatterns("/register") //用户注册
                .excludePathPatterns("/login"); //用户登录
    }

    /**
     * @return globalInterceptor
     */
    @Bean
    public GlobalInterceptor globalInterceptor() {
        return  new GlobalInterceptor();
    }
}

@Component
public class GlobalInterceptor extends HandlerInterceptorAdapter {
    private static Logger logger = LoggerFactory.getLogger(GlobalInterceptor.class);
    @Resource
    private UserRoleService userRoleService;

    /**
     * 调用action之前进行拦截
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return super.preHandle(request, response, handler);
    }

    /**
     * 从 cookie 中获取 token
     */
    private String getTokenFromCookie(HttpServletRequest request) {
        Cookie[] cookies = Optional.ofNullable(request.getCookies()).orElse(new Cookie[0]); // Optional 强制赋默认值,cookies一定不为 null
        String cookie = Arrays.stream(cookies).filter(item ->
                "X-Auth-Token".equals(item.getName())
        ).findFirst().map(Cookie::getValue).orElse(null);
        return cookie;
    }

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

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

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
在 Spring Boot 中,我们可以使用注解来定义拦截器。 首先,我们需要创建一个拦截器类,并实现 `HandlerInterceptor` 接口。例如: ```java import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行拦截处理 return true; // 返回 true 表示继续执行后续的拦截器或请求处理,返回 false 则表示中断请求处理 } @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 { // 在整个请求完成之后进行拦截处理,可以用来释放资源等操作 } } ``` 接下来,我们可以使用 `@Configuration` 注解创建一个配置类,然后通过 `addInterceptors()` 方法将拦截器注册到拦截器链中。例如: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyInterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**"); // 设置拦截路径 } } ``` 在上述示例中,我们创建了一个名为 `MyInterceptorConfig` 的配置类,并通过 `addInterceptors()` 方法将 `MyInterceptor` 拦截器添加到拦截器链中,并设置了拦截的路径为 "/*",即匹配所有请求路径。 这样,当请求进入时,会首先经过拦截器的 `preHandle()` 方法,在请求处理前进行拦截处理。如果 `preHandle()` 方法返回 true,则继续执行后续的拦截器或请求处理;如果返回 false,则中断请求处理。 需要注意的是,拦截器的注册顺序与执行顺序是相关的,可以通过 `addInterceptor()` 方法的顺序来确定拦截器的执行顺序。 希望对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值