springmvc拦截器的应用

刚好学到这里,然后觉得这个springmvc的拦截器还是很有用的,比如你直接通过ip地址去访问某个网站的内部,这个时候要是没有拦截器,这个就不相当于跳过了登陆注册直接访问数据库嘛,所以我们要在调用每个方法的时候进行一次拦截,保证你是有权力访问这个网站的

先看在springmvc.xml配置文件中怎么书写

	<!-- 配置拦截器 -->
	   	<mvc:interceptors>
	   		<mvc:interceptor>
	   			<mvc:mapping path="/**"/>
	   			<bean class="cn.itheima.springmvc.interceptor.interceptor1"></bean>
	   		</mvc:interceptor>
	   		<!-- <mvc:interceptor>
	   			<mvc:mapping path="/**"/>
	   			<bean class="cn.itheima.springmvc.interceptor.interceptor2"></bean>
	   		</mvc:interceptor> -->
	   	</mvc:interceptors>

<mvc:interceptors/>:是拦截器的标签,里面可以配置多个拦截

<mvc:intercepor/>:这个标签内主要写拦截的类型(/**就是所有的都拦截)和拦截的方法(bean内写拦截的方法)

就是当你通过service层访问某个方法的时候就会先通过拦截器一次,把违规的操作进行一次筛选吧,个人觉得

public class interceptor1 implements HandlerInterceptor{

	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("页面渲染后调用1");
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("方法后调用1");
		
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object object) throws Exception {
			
		System.out.println("方法前调用1");
		String URI = request.getRequestURI();
		if(!URI.contains("/login")){
			String username = (String) request.getSession().getAttribute("username_session");
			if(null == username){
				response.sendRedirect(request.getContextPath()+"/login.action");
				return false;
			}
		}
		return true;
	}

}

这个拦截方法实现了HandlerIntercepor接口内的方法,这里实现接口内的三个方法:首先我们要知道什么是方法前,方法后,页面渲染后。这几个抽象的概念(但是我觉得字面意思就是你感觉的那个意思),先看一下图,了解一下拦截器的执行流程



这样的执行过程,如果方法前放行(也就是return ture;  要是return false;就表示拦截),那么才有后面的方法后,和页面渲染后,

如果多个拦截器在,他也有自己的规则:

①preHandle 按拦截器定义顺序调用

②postHandler按拦截器定义逆序调用

③afterCompletion按拦截器定义逆序调用

④posthandler在拦截器链内所有拦截器返成功调用

⑤afterCompletion只有prehandle返回true才调用


大家也可以DUBUG一下看一下它具体的执行流程,哈哈哈,继续保持写博客


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章