简介
spring的拦截器interceptor就是web的Filter
部署
<!-- 配置拦截器群 --> <mvc:interceptors> <!-- 配置拦截器 --> <mvc:interceptor> <!-- 配置拦截路径! /** 代表所有 --> <mvc:mapping path="/**"/> <!-- 配置排除操作 path=“排除路径” --> <mvc:exclude-mapping path="/user/login"/> <!-- mvc内生成拦截器对象 --> <bean class="xyz.javaswing.Interceptor.PrivilegeInterceptor"/> </mvc:interceptor> </mvc:interceptors>
实现
拦截的使用实现Spring提供拦截器接口:HandlerInterceptor
重写内部的方法。
boolean preHandle (HttpServletRequest request , HttpServletResponse response , Object handler)
参数
request:拦截的请求对象
response:拦截的响应对象
handler:未知
返回值:boolean
返回值意义:能否通行。true可以通行,false不可通行
作用:拦截在响应前做出过滤操作
void postHandle(HttpServletRequest request,HttpServletResponse response , Object Handler,ModelAndView modelAndView)
参数:
request:拦截到的请求对象
response:拦截到的响应对象
handler:未知
modelAndView:拦截到的视图对象
返回值:无
返回值意义:无
作用:拦截请求,在视图返回前做出操作。
void afterCompletion(HttpServletRequest request,HttpServletResponse response , Object Handler,Exception ex)
参数:
request:拦截到的请求对象
response:拦截到的响应对象
handler:未知
ex:异常对象,未知作用
返回值:void
返回值意义:无
作用:在视图返回后,作操作
使用
<!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 配置排除操作 --> <mvc:exclude-mapping path="/user/login"/> <bean class="xyz.javaswing.Interceptor.PrivilegeInterceptor"/> </mvc:interceptor> </mvc:interceptors>
public class PrivilegeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 判断用户是否登陆,session中有无user HttpSession session = request.getSession(); User user =(User) session.getAttribute("user"); if( user == null ){ response.sendRedirect(request.getContextPath()+"/login.jsp"); return false; // 不放行 } // 有user,放行。让它访问啥就访问啥。 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } }