2009-03-27 7 views
0

En ce moment j'ai un filtre qui a les sockets ouverts dans l'init et pour une raison quelconque quand je les ouvre dans doFilter() ça ne marche pas avec l'application serveur droite donc je n'ai pas d'autre choix que de le mettre à l'initServlet Filter: Le socket doit être référencé dans doFilter()

Je dois être capable de référencer le outSide.println ("test"); dans doFilter() donc je peux l'envoyer à mon application serveur à chaque fois que l'instruction if dans est éteinte.

Heres mon code:

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();} 

    } 
} 

Répondre

0

Une autre possibilité serait d'utiliser log4j et faites-gérer la gestion des sockets. log4j peut être configuré pour conserver les messages du journal de ce filtre dans un fichier distinct de toute autre journalisation. Cela supprimerait complètement le besoin de sockets dans votre code.

Questions connexes