项目的某些功能,必须登录才能访问。 没有登录的前提下,去访问订单、地址等页面都跳转到登录页面。
LoginInterceptor
//拦截器使用第一步:实现一个接口HandlerInterceptor //判断一下路径,如果访问的路径是order或address,判断是否登录,未登录就强制转到登录界面 public class LoginInterceptor implements HandlerInterceptor { @Override //true表示放行,不拦截 //false表示不放行,拦截 //Controller方法调用之前执行 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("LoginInterceptor preHandle------------------------"); User user = (User) request.getSession().getAttribute("user"); if (user==null){ //request.getRequestURI() 返回除去host(域名或者ip)部分的路径 String address = request.getRequestURI(); System.out.println("address="+address); if (address.contains("order")||address.contains("address")){ //request.getContextPath() 返回工程名部分,如果工程映射为/,此处返回则为空 String contextPath = request.getContextPath(); //强制到登录界面 response.sendRedirect(contextPath+"/login.jsp"); return false; } } return true; } //Controller方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("LoginInterceptor postHandle------------------------"); } //在DispatcherServlet 渲染了对应的视图之后执行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("LoginInterceptor afterCompletion------------------------"); } }springmvc.xml
<!--拦截器使用第二步:配置拦截器--> <mvc:interceptors> <!--用于测试的拦截器--> <mvc:interceptor> <!--拦截路径的配置--> <mvc:mapping path="/**"/> <bean id="interceptor1" class="com.wzx.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>UserController
@Controller public class UserController { @RequestMapping("login.action") public ModelAndView login(User user, HttpSession session){ ModelAndView mv= new ModelAndView(); if ("jack".equals(user.getUsername())&&"1234".equals(user.getPassword())){ session.setAttribute("user",user); mv.setViewName("success"); return mv; } mv.setViewName("fail"); return mv; } }success.jsp
<a href="${pageContext.request.contextPath}/order/query.action">查看我的订单</a>测试OrderController
@Controller @RequestMapping("/order") public class OrderController { @RequestMapping(path = "/query.action",method = {RequestMethod.GET,RequestMethod.POST}) public String query(Integer id){ System.out.println("你访问了我的订单功能 "); return "order"; } }