springboot/interceptor springboot项目中拦截器中的注入service|工具类utils为空的处理方法

无论是filter还是interceptor都是无法使用自动注入获取属性的,无论是在拦截器类中注入还是在new的实例中有自动注入的属性都会报空值异常;

想在拦截器中使用自己的工具类或者其他ioc容器中的bean,可以在InterceptorConfiguration构建Interceptor时中填入属性值,因为在配置类中是可以使用自动注入的,具体的实现如下:

@Configuration//定义此类为配置类
public class LoginInterceptorConfig implements WebMvcConfigurer {
//    自动注入工具类
    @Autowired
    private RedisUtils redisUtils;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //addPathPatterns拦截的路径
        String[] addPathPatterns = {
                "/book/**"
        };
        //excludePathPatterns排除的路径
        String[] excludePathPatterns = {
                "login.html","user/login"
        };
        //创建用户拦截器对象并指定其拦截的路径和排除的路径
//      在创建的时候填入注入的工具类
        registry.addInterceptor(new CheckLoginInterceptor(redisUtils)).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
    }
}
@Component
public class CheckLoginInterceptor implements HandlerInterceptor {

//    声明属性
    private RedisUtils redisUtils;
//    创建有参构造方法
    public CheckLoginInterceptor(RedisUtils redisUtils){
        this.redisUtils=redisUtils;
    }
//  重写在controller之前执行的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        ServletContext servletContext = request.getServletContext();
        Object uid1 = servletContext.getAttribute("uid");
        System.out.println("uid1 = " + uid1);
        if (uid1 != null) {
            String uid = uid1.toString();
            System.out.println("uid = " + uid);
            User user = redisUtils.getUser(uid);
            if (user != null) {
                redisUtils.expire(uid);
                return true;
            }
        } else {
            servletContext.removeAttribute("uid");
            request.getRequestDispatcher("/no_login.html").forward(request, response);
        }
        return false;
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值