package org.broadleafcommerce.profile.web.core.security; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.broadleafcommerce.profile.web.core.CustomerState; import org.springframework.web.context.request.ServletWebRequest; import com.ssbusy.core.account.domain.MyCustomer; public class CustomerStateFilterEx extends CustomerStateFilter { private String regionView = "/region"; private String regionViewApp = "/app/region"; @Override public void doFilter(ServletRequest baseRequest, ServletResponse baseResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) baseRequest; customerStateProcessor.process(new ServletWebRequest(req, (HttpServletResponse) baseResponse)); MyCustomer customer = (MyCustomer) CustomerState.getCustomer(); if (customer.getRegion() == null && isNotSpider(req)) { String uri = req.getRequestURI(); // TODO /d/ 是下载页,不需要region if(uri.startsWith("/weixin/")&&!uri.startsWith("/weixin/region")){ if(!uri.startsWith("/weixin/service")){ ((HttpServletResponse) baseResponse).sendRedirect("/weixin/region?redirect="+req.getRequestURI()); return; } } if (!uri.startsWith(regionView) && !uri.startsWith(regionViewApp) && !uri.startsWith("/signin") && !uri.startsWith("/login") && !uri.startsWith("/extern") && !uri.startsWith("/register") && !uri.startsWith("/d/") && !uri.startsWith("/dl/") && !uri.startsWith("/app/d/")&& !uri.startsWith("/weixin/")) { // redirect,必选校区 ((HttpServletResponse) baseResponse) .sendRedirect(isAppRequest(baseRequest) ? regionViewApp // TODO hardcoded surfix '/redirect' + "/redirect?" + req.getQueryString() : regionView + "?redirect=" + req.getRequestURI()); return; } } chain.doFilter(baseRequest, baseResponse); } private boolean isNotSpider(HttpServletRequest req) { String ua = req.getHeader("user-agent"); return (ua == null || ua.indexOf("pider") < 0 || ua.indexOf("bot") < 0 || ua .indexOf("Bot") < 0); } private boolean isAppRequest(ServletRequest baseRequest) { return "jsonp".equals(baseRequest.getParameter("format")) && baseRequest.getParameter("callback") != null; } public String getRegionView() { return regionView; } public void setRegionView(String regionView) { this.regionView = regionView; } public String getRegionViewApp() { return regionViewApp; } public void setRegionViewApp(String regionViewApp) { this.regionViewApp = regionViewApp; } }