HandlerInterceptorConfigurer 类中需要
@Autowired
private UserService userService;
但是InterceptorRegistration interceptorRegistration = registry.addInterceptor(new HandlerInterceptorConfigurer());
时userService为空
分析原因 :
new 过的对象不会交给Spring容器管理 所以里面的 userService注入不进来。
解决:
HandlerInterceptorConfigurer类上加上
@Component
HandlerInterceptorConfigurer 使用注入的方式
@Autowired private HandlerInterceptorConfigurer handlerInterceptorConfigurer;
registry.addInterceptor(handlerInterceptorConfigurer);
完整代码(解决后的)

package com.could.demo.config; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.could.demo.entity.User; import com.could.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.ws.Action; /** * AUTHOR :zhao * 日期:2020/3/20 18:48 * 用户登录校验 * HandlerInterceptorAdapter相当于一个Filter拦截器,但是这个颗粒度更细,能使用Spring的@Autowired注入。 */ @Component public class HandlerInterceptorConfigurer extends HandlerInterceptorAdapter { /** *preHandle在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制等处理; * postHandle在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView; * afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面),可以根据ex是否为null判断是否发生了异常,进行日志记录; */ @Autowired private UserService userService; /** * 判断用户是否登录 通过session 实现 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); if (user != null){ QueryWrapper<User> wrapper = new QueryWrapper<>(); User user1 = new User(); user1.setName(user.getName()); wrapper.setEntity(user1); User one = userService.getOne(wrapper); if(one!=null&&user.getPassword().equals(one.getPassword())){ return true; } } // 跳转登录 String url = "/index"; response.sendRedirect(url); return false; } }

package com.could.demo.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.*; @Configuration public class Config { @Autowired private HandlerInterceptorConfigurer handlerInterceptorConfigurer; /** * AUTHOR :zhao * 日期:2020/3/17 17:55 * 解决跨域 */ @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration interceptorRegistration = registry.addInterceptor(handlerInterceptorConfigurer); // 排除配置 interceptorRegistration.excludePathPatterns("/error"); interceptorRegistration.excludePathPatterns("/login/**"); interceptorRegistration.excludePathPatterns("/index"); // 拦截配置 interceptorRegistration.addPathPatterns("/**"); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true) .maxAge(3600) .allowedHeaders("*"); } }; } /** * mybatis-plus SQL执行效率插件【生产环境可以关闭】 */ @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { //官网: https://mp.baomidou.com/guide/page.html PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false // paginationInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // paginationInterceptor.setLimit(500); // 开启 count 的 join 优化,只针对部分 left join // paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; } }