gt:                 PrintWriter pw = new PrintWriter(ps);
context: /*
   * To change this template, choose Tools | Templates
   * and open the template in the editor.
   */
  package ch.hearc.arcgames.filters;
  
  import ch.hearc.arcgames.entities.UserController;
  import java.io.IOException;
  import java.io.PrintStream;
  import java.io.PrintWriter;
  import java.io.StringWriter;
  import java.util.Enumeration;
  import javax.inject.Inject;
  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;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  
  /**
   *
   * @author mirco
   */
  @WebFilter(filterName = "AccessFilter", urlPatterns = {"/*"})
  public class AccessFilter implements Filter {
  
      @Inject
      private UserController uc;
      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 AccessFilter() {
      }
  
      private void doBeforeProcessing(ServletRequest request, ServletResponse response)
              throws IOException, ServletException {
          if (debug) {
              log("AccessFilter:DoBeforeProcessing");
          }
  
          // Write code here to process the request and/or response before
          // the rest of the filter chain is invoked.
  
          // For example, a logging filter might log items on the request object,
          // such as the parameters.
  	/*
           for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) {
           String name = (String)en.nextElement();
           String values[] = request.getParameterValues(name);
           int n = values.length;
           StringBuffer buf = new StringBuffer();
           buf.append(name);
           buf.append("=");
           for(int i=0; i < n; i++) {
           buf.append(values[i]);
           if (i < n-1)
           buf.append(",");
           }
           log(buf.toString());
           }
           */
      }
  
      private void doAfterProcessing(ServletRequest request, ServletResponse response)
              throws IOException, ServletException {
          if (debug) {
              log("AccessFilter:DoAfterProcessing");
          }
  
          // Write code here to process the request and/or response after
          // the rest of the filter chain is invoked.
  
          // For example, a logging filter might log the attributes on the
          // request object after the request has been processed. 
  	/*
           for (Enumeration en = request.getAttributeNames(); en.hasMoreElements(); ) {
           String name = (String)en.nextElement();
           Object value = request.getAttribute(name);
           log("attribute: " + name + "=" + value.toString());
  
           }
           */
  
          // For example, a filter might append something to the response.
  	/*
           PrintWriter respOut = new PrintWriter(response.getWriter());
           respOut.println("<P><B>This has been appended by an intrusive filter.</B>");
           */
      }
  
      /**
       *
       * @param request The servlet request we are processing
       * @param response The servlet response we are creating
       * @param chain The filter chain we are processing
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet error occurs
       */
      public void doFilter(ServletRequest request, ServletResponse response,
              FilterChain chain)
              throws IOException, ServletException {
  
          if (debug) {
              log("AccessFilter:doFilter()");
          }
  
          doBeforeProcessing(request, response);
  
          Throwable problem = null;
          try {
              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();
          }
  
  
          String page = ((HttpServletRequest) request).getRequestURI();
          if (!(page.equals("/ArcGames/faces/login.xhtml") || page.equals("/ArcGames/") || page.equals("/ArcGames/faces/user/Create.xhtml") || page.equals("/ArcGames/faces/news/List.xhtml") || page.equals("/ArcGames/faces/javax.faces.resource/css/jsfcrud.css"))) {
  
              if (uc == null || uc.getSessionId() == 0) {
                  ((HttpServletResponse) response).sendRedirect("/ArcGames/faces/login.xhtml");
              } else if ((page.equals("/ArcGames/faces/game/Create.xhtml")
                      || page.equals("/ArcGames/faces/game/Edit.xhtml")
                      || page.equals("/ArcGames/faces/news/Create.xhtml")
                      || page.equals("/ArcGames/faces/news/Edit.xhtml"))) {
                  if (uc == null || !uc.isAdmin()) {
                      ((HttpServletResponse) response).sendRedirect("/ArcGames/");
                  }
              }
          }
  
          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("AccessFilter:Initializing filter");
              }
          }
      }
  
      /**
       * Return a String representation of this object.
       */
      @Override
      public String toString() {
          if (filterConfig == null) {
              return ("AccessFilter()");
          }
          StringBuffer sb = new StringBuffer("AccessFilter(");
          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());
  