package cn.ce.sale.customer.filter;
import java.io.File;
import java.io.IOException;
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 cn.ce.framework.exception.api.NoLoginException;
import cn.ce.framework.security.api.LoginConstant;
import cn.ce.framework.security.api.LoginUser;
public class FileCaptureFilter implements Filter{
private String protDirPath;
private FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain
chain) throws IOException, ServletException {
//
LoginUser loginUser = (LoginUser) ((HttpServletRequest)request).getSession().getAttribute(LoginConstant.USER);
if (loginUser == null)
throw new NoLoginException();
String fileName = "/forum/userId_"+loginUser.getUserId()+".html";
File file = new File(filterConfig.getServletContext().getRealPath(fileName));
// 判斷快取檔案是否存在或者是否重新設定了快取內容
if (!file.exists()) {// 如果快取檔案不存在
fileName=protDirPath+fileName;
FileCaptureResponseWrapper responseWrapper = new
FileCaptureResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, responseWrapper);
//得到的html 頁面結果字串
//String html = responseWrapper.toString();
// 寫成html 檔案
responseWrapper.writeFile(fileName);
// back to browser
responseWrapper.writeResponse();
}else{
// 轉發至快取檔案
request.getRequestDispatcher(fileName).forward(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig=arg0;
protDirPath = arg0.getServletContext().getRealPath("/");
}