2009-03-27 2 views
0

지금은 init에서 열리는 소켓이 있고 doFilter()에서 열 때 어떤 이유로 서버 응용 프로그램과 작동하지 않습니다 맞아요. 그걸 초기화에 넣을 수밖에 없어요.서블릿 필터 : doFilter()에서 소켓을 참조해야합니다.

나는 outSide.println ("test")를 참조 할 수 있어야합니다; doFilter()에서 if 문이 실행될 때마다 서버 응용 프로그램으로 보낼 수 있습니다.

Heres는 내 코드 :

import java.net.*; 
import java.io.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public final class IEFilter implements Filter 
{ 
    public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) 

    throws IOException, ServletException 
    { 

    String browser = ""; 


     String blockInfo; 

     String address = request.getRemoteAddr(); 

    if(((HttpServletRequest)request).getHeader ("User-Agent").indexOf("MSIE") >= 0) 
     { 
      browser = "Internet Explorer"; 
     } 

    if(browser.equals("Internet Explorer")) { 

     BufferedWriter fW = new BufferedWriter(new FileWriter("C://logs//IElog.rtf")); 


     blockInfo = "Blocked IE user from:" + address; 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<HTML>"); 
     out.println("<HEAD>"); 
     out.println("<TITLE>"); 
     out.println("This page is not available - JNetProtect"); 
     out.println("</TITLE>"); 
     out.println("</HEAD>"); 
     out.println("<BODY>"); 
     out.println("<center><H1>Error 403</H1>"); 
     out.println("<br>"); 
     out.println("<br>"); 
     out.println("<H1>Access Denied</H1>"); 
     out.println("<br>"); 
     out.println("Sorry, that resource may not be accessed now."); 
     out.println("<br>"); 
     out.println("<br>"); 
     out.println("<hr />"); 
     out.println("<i>Page Filtered By JNetProtect</i>"); 
     out.println("</BODY>"); 
     out.println("</HTML>"); 

     //init.outSide.println("Blocked and Internet Explorer user"); 



      fW.write(blockInfo); 

      fW.newLine(); 

      fW.close(); 

    } else { 

     chain.doFilter(request, response); 


    } 
    } 

    public void destroy() 
    { 
     outsocket.close(); 
     outSide.close(); 
    } 

    public void init(FilterConfig filterConfig) 
    { 

    try 
    { 
    ServerSocket fs; 
    Socket outsocket; 
    PrintWriter outSide ; 

    outsocket = new Socket("Localhost", 1337); 
    outSide = new PrintWriter(outsocket.getOutputStream(), true); 

    }catch (Exception e){ System.out.println("error with this connection"); e.printStackTrace();} 

    } 
} 

답변

0

또 다른 가능성은 log4j에를 사용하는 것입니다 그것은 소켓 처리를 처리했다. log4j는이 필터의 로그 메시지를 다른 로깅과 다른 파일에 보관하도록 구성 할 수 있습니다. 그러면 코드에서 소켓이 필요하지 않게됩니다.

관련 문제