使用 Spring 容器管理 Filter


《使用 Spring 容器管理 Servlet》一文介绍了如何使用 Spring 对 Servlet 进行管理,本文是《使用 Spring 容器管理 Servlet》的姊妹篇,本文介绍如何使用 Spring 对 Filter 进行管理。其实具体原理方法和前者大同小异。

如一般的 J2EE 配置一样,Spring 在 web.xml 中的配置:

  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <context-param>  
  5.     <param-name>contextConfigLocation</param-name>  
  6.     <param-value>/WEB-INF/applicationContext*.xml</param-value>  
  7. </context-param>  

如一般的 J2EE 配置一样,Spring 在 applicationContext-service.xml 中定义我们的业务逻辑处理类:

  1. <bean id="logService"  
  2.     class="com.defonds.cds.system.log.impl.LogServiceImpl"  
  3.     parent="baseService" scope="singleton" init-method="init" destroy-method="destroy">  
  4. </bean>  

如同一般的 Struts1/2 的 action 一样在我们的 Filter 中注入 service:

  1. private LogService logService;  
  2. public LogService getLogService() {  
  3.     return logService;  
  4. }  
  5.   
  6. public void setLogService(LogService logService) {  
  7.     this.logService = logService;  
  8. }     

在 Filter 中如同一般的 Struts1/2 的 action 一样调用 service:

  1. String ip = logService.getIpAddr(request);  

如同一般的 Filter 我们的这个 Filter 需要实现 javax.servlet.Filter 接口:

  1. public class BlockedIpFilter implements Filter {  

根据自己的业务需要去实现 init、doFilter 和 destroy 方法:

  1. @Override  
  2. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,  
  3.         FilterChain filterChain) throws IOException, ServletException {  
  4.     if (ifIpBlocked) {  
  5.         HttpServletRequest request = (HttpServletRequest)servletRequest;  
  6.         HttpServletResponse response = (HttpServletResponse) servletResponse;    
  7.         String ip = logService.getIpAddr(request);  
  8.           
  9.         if (logService.ifBlocked(ip)) {  
  10.             response.getWriter().write("error");  
  11.             response.getWriter().close();  
  12.         } else {  
  13.             filterChain.doFilter(request, response);  
  14.         }  
  15.     } else {  
  16.         filterChain.doFilter(servletRequest, servletResponse);  
  17.     }  
  18.   
  19. }  
  20.   
  21. @Override  
  22. public void init(FilterConfig arg0) throws ServletException {  
  23.     // TODO Auto-generated method stub   
  24. }  
  25.   
  26. @Override  
  27. public void destroy() {  
  28.     // TODO Auto-generated method stub   
  29. }  
  • 1
  • 2
  • 下一页

相关内容