Interceptor拦截器
SpringMVC中,和Struts2一样有拦截器的概念,我们可以用拦截器实现登录验证、日志记录等功能。
使用拦截器使得功能代码解耦的更加清晰,实现了AOP的编程思想,在功能较复杂的项目中,也能保持代码结构清晰,利于维护。
使用SpringMVC拦截器
下面给出一个拦截器例子,实现session登录验证功能:
LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user == null) {
response.sendRedirect("/index");
System.out.println("未登录");
return false;
} else {
System.out.println("已登录");
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception{}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception{}
}
对拦截器进行配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/success"/>
<bean class="com.gacfox.controller.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
编写拦截器,首先实现HandlerInterceptor接口,然后在XML配置文件中进行拦截器类的声明。
代码中,我们实现了HandlerInterceptor接口的3个方法:
preHandle():在控制器方法执行前执行,返回值为true表示继续处理链,返回false表示终止处理链postHandle():在控制器方法执行后执行afterCompletion():在所有拦截器的postHandle()执行完成后执行
多个拦截器的执行流程
如果存在多个拦截器,拦截器中的方法会按照一定顺序调用,这里直接给出书中的一张图。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。