SpringMVC的拦截器(interceptor)返回的boolean类型是什么意思

SpringMVC的拦截器(interceptor)返回的boolean类型是什么意思


在SpringMVC中我们写拦截器,一般是继承HandlerInterceptorAdapter这个抽象类,并且重写方法preHandle这个方法

请看如下源码


public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {

	/**
	 * This implementation always returns {@code true}.
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
		throws Exception {
		return true;
	}
源码中这个方法没人返回的是true


这个里的true表示,执行完了当前这个被拦截的方法后继续执行下一个(拦截器)

如果你将返回值改为 false ,那就表示执行完当前这个被拦截的方法后就不执行其他的了


比如我们一个页面有两个请求会被拦截执行,如果我们对拦截器不做重写,那么这两个请求都会执行成功

如果我们重新了这个拦截器,并且将返回值改为了false,那么就会执行一个请求成功


如果我们根据业务逻辑判断出,需要重定向到某个页面,可以这样写,看如下代码片段


public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException{
		//获得session
		HttpSession session = request.getSession();
		session.setMaxInactiveInterval(1800);
		
		if(null == session.getAttribute("userinfo")){
			response.sendRedirect("/"+configProperties.getMapValue("web_Object")+"/user/clogin");
		}else{
			@SuppressWarnings("unchecked")
			Map<String,Object> map = (Map<String,Object>) session.getAttribute("userinfo");
			if((int)map.get("groupuser")!=10){
				response.sendRedirect("/"+configProperties.getMapValue("web_Object")+"/useradmin/index");
			}
		}
		return true;
	}
上面的代码的意思是,如果为空就重定向到一个页面


如果不为空 就判断某个字段是否是等于10,不等于的话,就重定向到另一个页面

然后返回true,表示继续执行后面的拦截器


在配置文件中,拦截器的配置通常如下格式


<mvc:interceptors>
	<mvc:interceptor>
	    <!-- 拦截所有的请求,验证是否是有效的IP地址 -->
		<mvc:mapping path="/**" />
		<mvc:exclude-mapping path="/error/page/**"/>
		<bean id="tokenAllInterceptor" class="springMVC.NLoveB.interceptor.TokenAllInterceptor" />
	</mvc:interceptor>
</mvc:interceptors>
每一个mvc:interceptor表示一个拦截器,在mvc:interceptors可以有多个mvc:interceptor


在mvc:interceptor里面  mvc:mapping和bean是必须的,他们表示被拦截的url和拦截器的位置

而mvc:exclude-mapping 不是必须的,他表示不被拦截的url地址


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img