配置拦截路径以及不拦截路径,创建拦截的类让他继承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 "";
}
}