在xxxFilter使用@Autowired来试图注入一个Bean,却发现userMapper为null;
@Component
public class SessionFilter implements Filter {
@Autowired
private UserMapper userMapper;
private static final Logger logger = LoggerFactory.getLogger(SessionFilter.class);
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
// 获得在下面代码中要用的request,response,session对象
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(false);
if (session.getAttribute("user")==null){
User sys_user = new User();
sys_user.setCreateDatetime(new Date());
sys_user.setModifyDatetime(new Date());
sys_user.setOperator("007");
sys_user.setUserId("007");
sys_user.setUserName("高启强");
sys_user.setUserEmail("gaoqiqiang@163.com");
sys_user.setUserStatus("enable");
sys_user.setUserPassword("2bHX20zW5wk1Nooe+xDjdw==");//123
sys_user.setUserPhoneno("18105647651");
sys_user.setUserType("1");
sys_user.setIsQualityInspector("0");
sys_user.setCompany("中科软");
sys_user.setChannel("ZY");
sys_user.setReset("Y");
logger.info("insert sys_user {}", sys_user);
//将写死的用户信息存入数据库以及session当中
userMapper.insert(sys_user);
session.setAttribute("user", sys_user);
}
chain.doFilter(req, resp);
}catch (Exception e){
logger.info("MenuLogFilter过滤器有异常",e);
throw new RuntimeException("MenuLogFilter过滤器有异常");
}
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
效果展示
![](https://img-blog.csdnimg.cn/img_convert/b1814aa1095999de57601890a7603597.png)
![](https://img-blog.csdnimg.cn/img_convert/ff1efaefd988a330e5f71bf05e0fc6ee.png)
提出疑问?我明明已经用了@Component将xxxxFilter扔到IOC中了啊,为什么会注入失败?
解决方案
使用ApplicationContext对象获取,在filter的init方法中做这个事
@Component
public class SessionFilter implements Filter {
@Autowired
private UserMapper userMapper;
private static final Logger logger = LoggerFactory.getLogger(SessionFilter.class);
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
// 获得在下面代码中要用的request,response,session对象
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(false);
if (session.getAttribute("user")==null){
User sys_user = new User();
sys_user.setCreateDatetime(new Date());
sys_user.setModifyDatetime(new Date());
sys_user.setOperator("007");
sys_user.setUserId("007");
sys_user.setUserName("高启强");
sys_user.setUserEmail("gaoqiqiang@163.com");
sys_user.setUserStatus("enable");
sys_user.setUserPassword("2bHX20zW5wk1Nooe+xDjdw==");//123
sys_user.setUserPhoneno("18105647651");
sys_user.setUserType("1");
sys_user.setIsQualityInspector("0");
sys_user.setCompany("中科软");
sys_user.setChannel("ZY");
sys_user.setReset("Y");
logger.info("insert sys_user {}", sys_user);
//将写死的用户信息存入数据库以及session当中
userMapper.updateByPrimaryKeySelective(sys_user);
session.setAttribute("user", sys_user);
}
chain.doFilter(req, resp);
}catch (Exception e){
logger.info("SessionFilter过滤器有异常",e);
throw new RuntimeException("SessionFilter过滤器有异常");
}
}
public void init(FilterConfig filterConfig) throws ServletException {
ServletContext context = filterConfig.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
userMapper= ctx.getBean(UserMapper.class);
}
}