springmvc拦截器配置

1、目的:拦截器的配置主要是对请求进行相应的处理(在登录和session过时的时候是一个很好的方式)

2、由于Spring容器的优越性,在配置的时候全部交给容器管理是一个很不错的方式

3、配置拦截器:

  1)在对应的方式类中实现HandlerInterceptor接口,会要求实现3个方法

  

@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		
		// TODO Auto-generated method stub
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		
		// TODO Auto-generated method stub
		
	}

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception {
		
		return true;
	}

  2)所有的请求都会在拦截器里面经过,这样在做登录拦截的时候会起到数据的保护和相关的展示限权

  在preHandle方法里面加入自己的逻辑

public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception {
		
		//获取判定登陆的session是否存在
		String token = (String) request.getSession().getAttribute("token");
		String postId = (String) request.getSession().getAttribute("postId");
		if(token == null || token == ""){
			String XRequested =request.getHeader("X-Requested-With");
			if("XMLHttpRequest".equals(XRequested)){
				response.getWriter().write("IsAjax");
			}else{
				response.sendRedirect("/m-web/");
			}
			return false;
		}
		if(postId == null || postId == ""){
			String XRequested =request.getHeader("X-Requested-With");
			if("XMLHttpRequest".equals(XRequested)){
				response.getWriter().write("IsAjax");
			}else{
				response.sendRedirect("/m-web/");
			}
			return false;
		}
		return true;
	}

  里面存在ajax请求拦截的处理详情见:http://www.cnblogs.com/ll409546297/p/6203403.html

3、在Spring的配置文件里面加入

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/user/login"/>
            <mvc:exclude-mapping path="/user/loginOut"/>
            <mvc:exclude-mapping path="/user/setPostId"/>
            <mvc:exclude-mapping path="/user/getPostId"/>
            <mvc:exclude-mapping path="/resources/**"/>
            <mvc:exclude-mapping path="/assets/**"/>
            <mvc:exclude-mapping path="/css/**"/>
            <mvc:exclude-mapping path="/fonts/**"/>
            <mvc:exclude-mapping path="/images/**"/>
            <mvc:exclude-mapping path="/img/**"/>
            <mvc:exclude-mapping path="/js/**"/>
            <mvc:exclude-mapping path="/pic/**"/>
            <mvc:exclude-mapping path="/plugins/**"/>
            <mvc:exclude-mapping path="/static/**"/>
            <mvc:exclude-mapping path="/ui/**"/>
            <bean class="com.troy.ai.web.Interceptors.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

解释:

<mvc:mapping path="/**"/>  //是对所有路径进行过滤
<mvc:exclude-mapping path="/user/login"/>  //是对该路径进行放行
<mvc:exclude-mapping path="/ui/**"/>  //是对静态资源加载放行
<bean class="com.troy.ai.web.Interceptors.LoginInterceptor"/>  //指定处理拦截的相关类

4、拦截器的配置相对简单,但是在实际的应用过程却非常常见,逻辑处理方面需要根据实际来处理

posted @ 2017-02-23 16:33  小不点丶  阅读(889)  评论(0编辑  收藏  举报