拦截器的实现
实现
HandlerInterceptor
接口public class MyInterceptor implements HandlerInterceptor { //在请求的处理方法之前执行 //如果返回true,那么执行下一个拦截器,返回false,则被拦截 //可以通过request,response实现页面跳转 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("--------------------处理前--------------------"); return false; } //在请求的处理方法执行之后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("--------------------处理后--------------------"); } //在DispatcherServlet处理后执行------一般用处清理工作 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
配置拦截器
<!-- 拦截器配置 --> <mvc:interceptors> <mvc:interceptor> <!-- /**表示路径及其子路径 /admin/*拦截/admin/add, /admin/list等请求, admin中的自路径不会被拦截 /admin/**拦截/admin/add, /admin/user/list等 --> <mvc:mapping path="/**"/> <!-- 配置对应的拦截器 --> <bean class="com.eric.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
登陆拦截器实例
拦截器
public class LoginInterceptor implements HandlerInterceptor { //需要明确拦截和不需要拦截的url和类 private List<String> allowedPath; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String url = request.getRequestURL().toString(); //先判断session User user = (User) request.getSession().getAttribute("user"); if(user != null) { System.out.println(user.getName() + ": " + user.getPwd()); return true; } for(String temp : allowedPath) { if(url.endsWith(temp)) { return true; } } response.sendRedirect(request.getContextPath() + "/login.jsp"); return false; } public void setAllowedPath(List<String> allowedPath) { this.allowedPath = allowedPath; } }
配置文件
<!-- 拦截器配置 --> <mvc:interceptors> <mvc:interceptor> <!-- /**表示路径及其子路径 拦截所有的controller /admin/*拦截/admin/add, /admin/list等请求, admin中的自路径不会被拦截 /admin/**拦截/admin/add, /admin/user/list等 --> <mvc:mapping path="/**"/> <bean class="com.eric.interceptor.LoginInterceptor"> <property name="allowedPath"> <list> <value>login.do</value> <value>add.do</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors>
- 可以通过注入,来选择拦截/不被拦截的请求
Controller
@Controller public class UserController { @RequestMapping("/login") public String login(User user, HttpSession session) { System.out.println("controller---" + user.getName() + ": " + user.getPwd()); if("char".equals(user.getName()) && "1234".equals(user.getPwd())) { session.setAttribute("user", user); return "redirect:/index.jsp"; } return "redirect:/login.jsp"; } @RequestMapping("/add") public String add() { System.out.println("add"); return "redirect:/index.jsp"; } }