SpringMVC中的拦截器
概念
SpringMVC中的拦截器与servlet中过滤器功能差不多。不过拦截器与过滤器是有区别的。
过滤器依赖容器,而拦截器基于java反射。不依赖容器。
拦截器与过滤器的区别:
工作原理图
自定义拦截器
通过实现HandlerInterceptor
/**
* 自定义拦截器
* @author Fzxey
*
*/
public class FirstIntercepter implements HandlerInterceptor{
/**
* 进入Handler之前调用的方法
* 处理:
* 用于身份确认和授权
* 比如确认当前请求是否登陆,如果登陆就方法,否则拦截跳回登陆界面
* @return
* true 放过
* false 拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle 执行了...");
return true;
}
/**
* 进入Handler之后,返回ModelAndView对象之前执行
* 可以修改调整的视图
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("ModelAndView之前执行...");
modelAndView.setViewName("/error.jsp");
modelAndView.addObject("msg", "传递的信息...");
}
/**
* 执行完成Handler之后执行此方法,
* 应用场景:
* 统一异常处理,统一日志处理,资源释放
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("执行完Handler到返回客户端之前执行...");
}
}
配置拦截条件
测试
参考:https://blog.youkuaiyun.com/chenleixing/article/details/44573495
以上
@Fzxey