配置拦截路径以及不拦截路径,创建拦截的类让他继承HandlerInterceptorAdapter这个类,重写里面的preHandle方法。一个配置文件里面可以配置很多拦截器,当拦截器返回值为true时表示放行当为false时为拦截。
1.拦截器配置
2.实现业务
package com.zipx.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.zipx.entity.site.Customer; import com.zipx.util.Const; /* * 检验用户是否登录,如果登录判断销售地是否与请求路径匹配 */ public class CheckSalesMarketInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String url=request.getRequestURI(); //判断用户是否已经登录过系统 Customer customer=(Customer)request.getSession().getAttribute(Const.SESSION_CUSTOMER_USER); //截取第一个customer后面的字符串 String cutURL=url.substring(url.indexOf("/customer/")); if (cutURL.length()<13) { if (customer!=null) { if (customer.getSalesMarketID()==1) { return true; }else { String resURL=getURLBysalesMarketID(customer.getSalesMarketID()); response.sendRedirect(request.getContextPath()+resURL); return false; } }else { //根据用户请求跳转相应的登录页面,如当用户请求含有/CN/将其跳转到中文的登录的页面 if (url.contains("/customer/CN")) { //跳转到中文的登录的页面 response.sendRedirect(request.getContextPath()+"/customer/CN/login"); return false; } if (!url.contains("/customer/CN")) { //跳转到英文的登录的页面 response.sendRedirect(request.getContextPath()+"/customer/login"); return false; } } } String requestUrl=cutURL.substring(cutURL.indexOf("/customer/")+0, 13); if(customer == null){ //根据用户请求跳转相应的登录页面,如当用户请求含有/CN/将其跳转到中文的登录的页面 if (url.contains("/customer/CN")) { //跳转到中文的登录的页面 response.sendRedirect(request.getContextPath()+"/customer/CN/login"); return false; } if (!url.contains("/customer/CN")) { //跳转到英文的登录的页面 response.sendRedirect(request.getContextPath()+"/customer/login"); return false; } }else { Integer salesMarketID=customer.getSalesMarketID(); //判断请求的路径是否与其销售地一致 if (requestUrl.equals("/customer/CN/")) { if (salesMarketID==2) { return true; }else { String resURL=getURLBysalesMarketID(salesMarketID); response.sendRedirect(request.getContextPath()+resURL); return false; } } if (!requestUrl.equals("/customer/CN/")&&!requestUrl.equals("/customer/CN/")) { //说明是访问的英文版 if (salesMarketID==1) { return true; }else { String resURL=getURLBysalesMarketID(salesMarketID); response.sendRedirect(request.getContextPath()+resURL); return false; } } } return true; } //判断传入进来的销售地,对应传出相应的首页的链接 public String getURLBysalesMarketID(Integer salesMarketID){ switch (salesMarketID) { case 1: //返回英文的首页地址 return "/home/index"; case 2: //返回中文的首页地址 return "/home/CN/index"; } return ""; } }
