package com.mossle.cms.support; import java.io.IOException; import javax.annotation.Resource; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mossle.api.tenant.TenantDTO; import com.mossle.api.tenant.TenantHolder; import com.mossle.core.util.IoUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CmsFilter implements Filter { private static Logger logger = LoggerFactory.getLogger(CmsFilter.class); private TenantHolder tenantHolder; private String storeBaseDir = "mossle.store"; private String cmsBaseDir = "/cms/html"; public void init(FilterConfig filterConfig) { } public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws ServletException, IOException { TenantDTO tenantDto = null; try { tenantDto = tenantHolder.getTenantDto(); } catch (Exception ex) { filterChain.doFilter(req, res); return; } HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; logger.debug("requestURI : {}", request.getRequestURI()); logger.debug("requestURL : {}", request.getRequestURL()); logger.debug("servletPath : {}", request.getServletPath()); logger.debug("pathInfo : {}", request.getPathInfo()); String servletPath = request.getServletPath(); if (tenantDto.getType() != TenantDTO.TYPE_CMS) { if (servletPath.startsWith("/cms/r/")) { String path = storeBaseDir + "/" + tenantDto.getId() + cmsBaseDir + servletPath.substring("/cms".length()); logger.debug("path : {}", path); IoUtils.copyFileToOutputStream(path, response.getOutputStream()); } else { filterChain.doFilter(req, res); } return; } if ("/portal/index.do".equals(servletPath)) { response.sendRedirect(request.getContextPath() + "/index.html"); return; } IoUtils.copyFileToOutputStream(storeBaseDir + "/" + tenantDto.getId() + cmsBaseDir + servletPath, response.getOutputStream()); } public void destroy() { } public void setStoreBaseDir(String storeBaseDir) { this.storeBaseDir = storeBaseDir; } public void setCmsBaseDir(String cmsBaseDir) { this.cmsBaseDir = cmsBaseDir; } @Resource public void setTenantHolder(TenantHolder tenantHolder) { this.tenantHolder = tenantHolder; } }