JSP

#8.2 필터링

코딩클로스 2020. 5. 9. 20:47

필터는 자원에 대한 요청과 자원으로부터 클라이언트로 전달되는 응답에 대하여 필요한 조작을 할 수 있는 자바 컴포넌트입니다.

 

FileListBean.java를 작성 하겠습니다.

DownloadServlet.java를 생성합니다.

 

index.jsp를 작성합니다.

 

 

FileFilter.java를 작성하겠습니다.

 

 

package file_download;

 

import java.io.IOException;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.io.StringWriter;

import java.util.StringTokenizer;

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.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

 

 

 

public class FileFilter implements Filter {

 

private static final boolean debug = true;

 

// The filter configuration object we are associated with. If

// this value is null, this filter instance is not currently

// configured.

private FilterConfig filterConfig = null;

 

public FileFilter() {

}

 

private boolean doBeforeProcessing(ServletRequest request, ServletResponse response)

throws IOException, ServletException {

boolean status = true;

if (debug) {

log("FileFilter:DoBeforeProcessing");

}

 

HttpServletRequest httpReq = (HttpServletRequest) request;

httpReq.setCharacterEncoding("UTF-8");

String fileName = httpReq.getParameter("file_name");

StringTokenizer st= new StringTokenizer(fileName,".");

String lastToken = null;

while(st.hasMoreTokens()){

lastToken= st.nextToken();

}

if(!lastToken.equals("txt")){

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<html>");

out.println("<meta http-equiv=\"Content-Type\"content=\"text/html;charset=UTF-8\">");

out.println("<title>부적절한 파일 포맷!!</title>");

out.println("</head>");

out.println("\"txt\" 형태가 아닌 파일을 선택하여 내려 받기가 거부되었습니다. <br/>");

out.println("(파일명:" + fileName+")");

out.println("</html>");

out.close();

status =false;

}

return status;

}

 

private void doAfterProcessing(ServletRequest request, ServletResponse response)

throws IOException, ServletException {

if (debug) {

log("FileFilter:DoAfterProcessing");

}

 

 

}

 

 

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain)

throws IOException, ServletException {

 

if (debug) {

log("FileFilter:doFilter()");

}

 

boolean status = doBeforeProcessing(request,response);

 

 

 

Throwable problem = null;

try {

 

if(status==true){

chain.doFilter(request, response);

 

}

} catch (Throwable t) {

// If an exception is thrown somewhere down the filter chain,

// we still want to execute our after processing, and then

// rethrow the problem after that.

problem = t;

t.printStackTrace();

}

 

doAfterProcessing(request, response);

 

// If there was a problem, we want to rethrow it if it is

// a known type, otherwise log it.

if (problem != null) {

if (problem instanceof ServletException) {

throw (ServletException) problem;

}

if (problem instanceof IOException) {

throw (IOException) problem;

}

sendProcessingError(problem, response);

}

}

 

/**

* Return the filter configuration object for this filter.

*/

public FilterConfig getFilterConfig() {

return (this.filterConfig);

}

 

/**

* Set the filter configuration object for this filter.

*

* @param filterConfig The filter configuration object

*/

public void setFilterConfig(FilterConfig filterConfig) {

this.filterConfig = filterConfig;

}

 

/**

* Destroy method for this filter

*/

public void destroy() {

}

 

/**

* Init method for this filter

*/

public void init(FilterConfig filterConfig) {

this.filterConfig = filterConfig;

if (filterConfig != null) {

if (debug) {

log("FileFilter:Initializing filter");

}

}

}

 

/**

* Return a String representation of this object.

*/

@Override

public String toString() {

if (filterConfig == null) {

return ("FileFilter()");

}

StringBuffer sb = new StringBuffer("FileFilter(");

sb.append(filterConfig);

sb.append(")");

return (sb.toString());

}

 

private void sendProcessingError(Throwable t, ServletResponse response) {

String stackTrace = getStackTrace(t);

 

if (stackTrace != null && !stackTrace.equals("")) {

try {

response.setContentType("text/html");

PrintStream ps = new PrintStream(response.getOutputStream());

PrintWriter pw = new PrintWriter(ps);

pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N

// PENDING! Localize this for next official release

pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");

pw.print(stackTrace);

pw.print("</pre></body>\n</html>"); //NOI18N

pw.close();

ps.close();

response.getOutputStream().close();

} catch (Exception ex) {

}

} else {

try {

PrintStream ps = new PrintStream(response.getOutputStream());

t.printStackTrace(ps);

ps.close();

response.getOutputStream().close();

} catch (Exception ex) {

}

}

}

 

public static String getStackTrace(Throwable t) {

String stackTrace = null;

try {

StringWriter sw = new StringWriter();

PrintWriter pw = new PrintWriter(sw);

t.printStackTrace(pw);

pw.close();

sw.close();

stackTrace = sw.getBuffer().toString();

} catch (Exception ex) {

}

return stackTrace;

}

 

public void log(String msg) {

filterConfig.getServletContext().log(msg);

}

 

}

 

'JSP' 카테고리의 다른 글

#8.3 필터링 (대문자를 소문자로 변경)  (0) 2020.05.14
#9.1 JSP 로깅  (0) 2020.05.10
#8.1 JSP 웹 초기화  (0) 2020.05.08
#7.2 JSP Download 프로젝트  (0) 2020.05.07
#7.1 JSP FileUpload프로젝트  (0) 2020.05.06