概述:springmvc的处理器拦截器类似于servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自定义一些拦截器来实现特定的功能。
过滤器与拦截器的区别:拦截器是AOP 思想的具体应用。
过滤器:
servlet规范中的一部分,任何Java web工程都可以使用在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截拦截器:
是springmvc框架自己的,中有使用了springmvc框架的工程才能使用只会拦截访问的控制器方法,如果访问的是jsp/html/css/image/js是不会进行拦截的想要自定义拦截器,必须实现 HandlerInterceptor 接口。
1.LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); //放行:判断什么情况下登录,session存在 //登陆页面也会放行 if(request.getRequestURI().contains("goLogin")){ return true; } //第一次登陆也没有session if(request.getRequestURI().contains("login")){ return true; } if(session.getAttribute("userLoginInfo")!=null){ return true; } //拦截 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response); return false; } }2.MyInterceptor(用于演示)
public class MyInterceptor implements HandlerInterceptor { //return true 执行下一个拦截器,放行 //return false 不执行下一个拦截器,卡死 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("============处理前============"); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("============处理后============"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("============清理============"); } }LoginController
@Controller @RequestMapping("/user") public class LoginController { @RequestMapping("/goLogin") public String goLogin(String username, String password, HttpSession session,Model model){ //把用户的信息存在session中; session.setAttribute("userLoginInfo",username); model.addAttribute("username",username); return "login"; } @RequestMapping("/main") public String main1(){ return "main"; } @RequestMapping("/login") public String login(){ return "main"; } @RequestMapping("/goOut") public String goOut(HttpSession session){ //把用户的信息存在session中; session.removeAttribute("userLoginInfo"); return "index"; } }