在对用户是否登陆及用户是否具有权限进行操作时 需要引入拦截器对所有页面进行拦截 判断是否具有权限进行操作。
(当然对所有页面写单独一段权限验证也是可以的,只不过太过复杂,所以使用拦截器是最合适的)
SpringMvc 本身就是一个拦截器,当然也有其内置的拦截器。
拦截器的方法继承于 HandlerInterceptorAdapter 这个抽象类(当然WebRequestHandlerInterceptorAdapter也可以实现拦截器操作)。
里面有四个方法 preHandle 、postHandle 、afterCompletion 、afterConcurrentHandlingStarted。
抽象类里面是这样子的。
@Override
/**当然我们最常用的当然是preHandler。
* 可以看到preHandle方法的返回值是一个Boolean类型的。
* 如果返回为true 那么就表示通过了拦截器,可以继续进行下一步操作,如果为false则未通过不能继续进行操作。
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
/**
* postHandle的执行是在controller层的方法执行完毕,在dispatchservlet返回视图渲染之前执行。
* 也就是preHandler 是在controller层之前执行,postHandler是在controller层之后执行。
*/
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
/**
* afterCompletion则是在dispatchservlet返回视图渲染之后执行,主要作用是进行一些资源的清理工作。
*/
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
如果我们需要使用多个拦截器,并且对某些页面不需要进行拦截操作,我们可以在spirng -web.xml中这样配置。
mapping 标签是匹配 exclude-mapping标签是排除
bean标签里配置好拦截器对应的实体类。
这样拦截器便可以正常工作了。