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/天,具体规则查看活动详情