使用 Spring 容器管理 Filter
使用 Spring 容器管理 Filter
《使用 Spring 容器管理 Servlet》一文介绍了如何使用 Spring 对 Servlet 进行管理,本文是《使用 Spring 容器管理 Servlet》的姊妹篇,本文介绍如何使用 Spring 对 Filter 进行管理。其实具体原理方法和前者大同小异。
如一般的 J2EE 配置一样,Spring 在 web.xml 中的配置:
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext*.xml</param-value>
- </context-param>
如一般的 J2EE 配置一样,Spring 在 applicationContext-service.xml 中定义我们的业务逻辑处理类:
- <bean id="logService"
- class="com.defonds.cds.system.log.impl.LogServiceImpl"
- parent="baseService" scope="singleton" init-method="init" destroy-method="destroy">
- </bean>
如同一般的 Struts1/2 的 action 一样在我们的 Filter 中注入 service:
- private LogService logService;
- public LogService getLogService() {
- return logService;
- }
- public void setLogService(LogService logService) {
- this.logService = logService;
- }
在 Filter 中如同一般的 Struts1/2 的 action 一样调用 service:
- String ip = logService.getIpAddr(request);
如同一般的 Filter 我们的这个 Filter 需要实现 javax.servlet.Filter 接口:
- public class BlockedIpFilter implements Filter {
根据自己的业务需要去实现 init、doFilter 和 destroy 方法:
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
- FilterChain filterChain) throws IOException, ServletException {
- if (ifIpBlocked) {
- HttpServletRequest request = (HttpServletRequest)servletRequest;
- HttpServletResponse response = (HttpServletResponse) servletResponse;
- String ip = logService.getIpAddr(request);
- if (logService.ifBlocked(ip)) {
- response.getWriter().write("error");
- response.getWriter().close();
- } else {
- filterChain.doFilter(request, response);
- }
- } else {
- filterChain.doFilter(servletRequest, servletResponse);
- }
- }
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- // TODO Auto-generated method stub
- }
- @Override
- public void destroy() {
- // TODO Auto-generated method stub
- }
|
评论暂时关闭