使用Java配置在Spring中过滤

时间:2016-09-14 08:31:13

标签: java spring spring-mvc filter

我在Spring项目中,我需要过滤器。 现在我已经读过" Interceptor Vs Filter"现在我选择过滤器。

所以我把这个类作为过滤器

public class LogFilter implements Filter {

    private final Logger log = LoggerFactory.getLogger(this.getClass());

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain   chain)
        throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        String ipAddress = request.getRemoteAddr();
        this.log.info("IP " + ipAddress + ", Time " + new Date().toString());

        chain.doFilter(req, res);
    }

    public void init(FilterConfig config) throws ServletException {

        // Get init parameter
        String testParam = config.getInitParameter("test-param");
        this.log.info("Test Param:" + testParam);
    }

    public void destroy() {

    // Add code to release any resource
    }
}

这种在java配置中注册过滤器bean的方法(无xml配置)

  @Bean
  public LogFilter filter() {

    LogFilter filter = new LogFilter();
    this.beanFactory.autowireBean(filter);
    return filter;
  }

现在这个过滤器适用于我的应用的每个网址,如何选择哪个网址"在过滤器" ?

修改 我用这种方式解决了这个问题

@Bean
public FilterRegistrationBean regFilter() {

    FilterRegistrationBean regFilter = new FilterRegistrationBean();
    regFilter.setFilter(new LogFilter());
    regFilter.addUrlPatterns("/test");
    return regFilter;
}

感谢评论中的提示,我找到了this

1 个答案:

答案 0 :(得分:0)

如果您正在使用注释来配置您的网络@WebFilter按http://docs.oracle.com/javaee/6/tutorial/doc/bnagb.html注释您的过滤器。

请注意,这些注释应放在LogFilter中。而且它与春豆或春天的背景无关。这些配置由应用程序服务器扫描和处理,例如Tomcat,但是Spring。