Web过滤器、拦截器

Web过滤器、拦截器

过滤器

什么是过滤器:

Servlet规范当中定义的一种特殊的组件,用来拦截Servlet容器的调用过程。

什么时候触发:

客户发送一个请求,先经过过滤器,在执行servlet。响应的数据也要经过过滤器,再到界面。

使用场景:

1. 对用户请求进行统一认证。

2. 对用户的访问请求进行记录和审核。

3. 对用户发送的数据进行过滤或替换。

4. 对响应的内容进行压缩,减少传输量。

5. 对请求或响应进行加解密处理。

小案例:

当用户发送一个请求到服务器,先过滤,从Session中获取用户信息,从而判断出给用户是否登录。代码如下:

public class TestFilter implements Filter {

    /**
     * Default constructor. 
     */
    public TestFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpSession session = httpServletRequest.getSession();
		String name = (String) session.getAttribute("name");
		String password = (String) session.getAttribute("password");
		if(name == null && password == null){
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}else{
			chain.doFilter(request, response);
		}
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

web.xml配置文件:

 <filter>
    <filter-name>TestFilter</filter-name>
    <filter-class>com.servlet.TestFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

拦截器

什么是拦截器:

拦截器属于Spring框架里面的,拦截的是DispatcherServlet调用的过程。

什么时候触发:

DispatcherServlet收到请求后,如果有拦截器,则先执行拦截器方法,在执行处理器Controller的方法。

小案例:

要实现HandlerInterceptor。代码如下:

public class SessionInterceptor implements HandlerInterceptor{
    private double time;
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		time = System.currentTimeMillis();
		HttpSession session =  request.getSession();
		Object obj = session.getAttribute("user");
		if(obj == null){
			//没有登录,重定向到登录界面
			System.out.println("没有登录,重定向到登录界面");
			response.sendRedirect("toLogin.do");
			return false;
		}
		//登录过了,则继续向后执行
		System.out.println("登录过了,则继续向后执行");
		return true;
	}

	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
	
		
	}

	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		double times = System.currentTimeMillis();
		System.out.println(times-time);
		
	}

}


要在spring配置文件中配置拦截器:

<!-- 配置拦截器 -->
	<mvc:interceptors>
	  <mvc:interceptor>
	    <mvc:mapping path="/**"/>
	    <mvc:exclude-mapping path="/toLogin.do"/>
	    <mvc:exclude-mapping path="/login.do"/>
	    <mvc:exclude-mapping path="/checkcode.do"/>
	    <bean class="cn.tedu.ems.interceptors.SessionInterceptor"></bean>
	  </mvc:interceptor>
	</mvc:interceptors>

猜你喜欢

转载自blog.csdn.net/demo_gsl/article/details/80995657