如何在Java Filter 中注入 Service

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java Filter 中注入 Service相关的知识,希望对你有一定的参考价值。

参考技术A 在Java Filter 中注入 Service
解决方法:
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse resp = (HttpServletResponse)response; ServletContext sc = req.getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(sc);

if(cxt != null && cxt.getBean("usersService") != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService");

Users users = this.usersService.queryByOpenid(openid);
  这样就行了。
参考技术B 既然你要需要统计网站流量数据,使用filter,而这个filter使用了一个Service,肯定是是用其一个方法。

照这么看着,我看根本不需要这个filter,在调用这个方法之前使用一个拦截器,亦称spring方法拦截器。在这个拦截器中的继承方法中统计网站流量数据。

==================================================
或者:用 硬编码 在Filter里 new 一个 Service 了出来

在如何在Filter 中注入

今天在做项目的过程中想在filter中注入RedisTemplate,发现使用@Autowired注解报java.lang.NullPointerException。
这是因为filter和springmvc共存在web容器中,filter的初始化和spring容器是摩云关系的,所以会 注入失败。
那么如何在filter中注入RedisTemplate呢?实例如下

public class SessionFilter implements Filter 

    // 声明一个redisTemplate
    RedisTemplate redisTemplate;

    public void destroy() 
    

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException 

        // 获取容器
        HttpServletRequest req = (HttpServletRequest) request;
        ServletContext sc = req.getSession().getServletContext();
        XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);

        // 从容器中获取redisTemplate
        if(cxt != null && cxt.getBean("redisTemplate") != null && redisTemplate == null)
            redisTemplate = (RedisTemplate) cxt.getBean("redisTemplate");

        Object user = redisTemplate.opsForValue().get("sessionId");

    
  @Override
    public void init(FilterConfig filterConfig) throws ServletException 

    

先在代码中获取到XmlWebApplicationContext ,再从容器中获取实例即可

以上是关于如何在Java Filter 中注入 Service的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java Filter 中注入 Service

在如何在Filter 中注入

在如何在Filter 中注入

JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean

java web如何防止html,js注入

如何在filter等dubbo自管理组件中注入spring的bean