拦截器(Interceptor)和过滤器(Filter)

1.filter过滤器含义

依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:web.xml自定义encodingFilter过滤器
使得前端提交的数据编码都已utf-8形式提交到后台
在这里插入图片描述

2.拦截器的含义:

依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理,例如一些页面必须要先登录才可以展示,否则一些人知道内部页面的访问地址直接按地址访问无拦截则可以任意修改内部数据了。
#3. springmvc配置
在这里插入图片描述

package cn.com.mvc.interceptor;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Intercepter;

import cn.com.mvc.model.Teacher;
public class LoginInterceptor implements HandlerInterceptor {
	 /**
	   * 在执行Hander(调用方法函数时)前执行,验证正确返回ture,放行,不正确返回boolean
	   * 决定程序是否继续执行,只有返回true后,postHandle,afterCompletion才有执行的资格
	   */
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		//1、用户登录session、登录环境库列表信息存在且未超时,放行
		Teacher teacher = (Teacher) request.getSession().getAttribute("globalTeach");	
		if(teacher!=null){
			System.out.print("hello");
			request.getRequestDispatcher("/w/m/loginOutTime").forward(request, response);
			return false;		
		}
		return true;	
	}
  /**
   * 在执行Hander(调用方法函数时)后执行,同一的异常或者日志处理
   */
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}
	 /**
	   * 在执行Hander(调用方法函数时)后返回modelandview(视图渲染)前执行,用户统一处理返回的视图,例如将
	   * 公用的模型数据(导航菜单)添加到视图中
	   */
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

[参考文档]
[1]:https://blog.csdn.net/andyzhaojianhui/article/details/78769920

猜你喜欢

转载自blog.csdn.net/weixin_40620651/article/details/102545058