package com.fpcms.common.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.Assert;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import com.fpcms.common.util.CmsSiteUtil;
import com.fpcms.common.util.WebUtil;
import com.fpcms.model.CmsSite;
import com.fpcms.service.CmsSiteService;
public class RedirectLocation301Filter extends OncePerRequestFilter implements Filter{
private CmsSiteService cmsSiteService;
public void setCmsSiteService(CmsSiteService cmsSiteService) {
this.cmsSiteService = cmsSiteService;
Assert.notNull(cmsSiteService,"cmsSiteService must be not null");
}
@Override
protected void initFilterBean() throws ServletException {
super.initFilterBean();
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
setCmsSiteService(wac.getBean(CmsSiteService.class));
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if(isNeedSendRedirect(request, response)) {
return;
}
filterChain.doFilter(request, response);
}
private boolean isNeedSendRedirect(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String site = CmsSiteUtil.getSite(request,cmsSiteService);
CmsSite cmsSite = cmsSiteService.getById(site);
if(cmsSite == null) {
return false;
}
String redirectSite = cmsSite.getRedirectSite();
if(StringUtils.isNotBlank(redirectSite)) {
String queryString = StringUtils.isBlank(request.getQueryString()) ? "" : "?" + request.getQueryString();
String location = "http://"+redirectSite+request.getRequestURI()+queryString;
// response.sendRedirect(location);
WebUtil.send301Redirect(response, location);
return true;
}
return false;
}
}