SpringBoot new对象里面的类注入失败


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;
    }
}
HandlerInterceptorConfigurer
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;
    }
}
拦截器

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM