I thought it would be best to put this where it would be easy to find
for searchers.

package com.crackwillow.filter;

import java.io.IOException;
import java.io.PrintStream;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.crackwillow.constant.SiteConstant;
import com.crackwillow.log.StdOut;

public class SessionExpireFilter
    implements Filter {
  private static final String       REDIRECT     = "redirect";
  private static final String       HTTP         = "http";
  private static       boolean      no_init      = true;
  private              FilterConfig filterConfig;
  private              String       redirect;

  public SessionExpireFilter()
  {
    redirect = null;
  }

  public void init(FilterConfig filterConfig)
      throws ServletException {
    filterConfig = filterConfig;
    no_init      = false;
    initRoute();
  }

  public void destroy() {
    filterConfig = null;
  }

  public FilterConfig getFilterConfig() {
    return filterConfig;
  }

  public void setFilterConfig(FilterConfig filterConfig) {
    if(no_init) {
      filterConfig = filterConfig;
      initRoute();
      no_init      = false;
    }
  }

  public void doFilter(ServletRequest request,
                       ServletResponse response,
                       FilterChain filterChain)
      throws IOException,
             ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest)request;
    HttpSession        httpSession = httpRequest.getSession(false);

    if(httpSession == null ||
      httpRequest.getRequestedSessionId() == null ||
      redirect == null) {
      filterChain.doFilter(request, response);
    } else {
      String sessionId = httpSession.getId();
      if(sessionId.equals(httpRequest.getRequestedSessionId())) {
        filterChain.doFilter(request, response);
      } else {
        HttpServletResponse httpResponse = (HttpServletResponse)response;
        ServletContext servletContext = filterConfig.getServletContext();
        if(getRedirect(redirect)) {
          httpResponse.sendRedirect(redirect);
        } else {
          RequestDispatcher requestDispatcher =
servletContext.getRequestDispatcher(redirect);
          requestDispatcher.forward(request, response);
        }
      }
    }
  }

  public void initRoute() {
    ServletContext servletContext = filterConfig.getServletContext();
    redirect = filterConfig.getInitParameter(REDIRECT);
    if(redirect == null) {
      StdOut.log(SiteConstant.ERROR_LOG,"The variable redirect in
SessionExpireFilter is not set.");
    }
  }

  private boolean getRedirect(String redirectURL) {
    int i = redirectURL.indexOf(":");
    if(i <= 0) {
      return false;
    } else {
      return redirectURL.substring(0,
i).toUpperCase().toLowerCase().startsWith(HTTP);
    }
  }
}

/*
<filter>
  <filter-name>SessionExpireFilter</filter-name>
  <filter-class>com.crackwillow.filter.SessionExpireFilter</filter-class>
  <init-param>
  <param-name>redirect</param-name>
  <param-value>/index.jsp</param-value>
  </init-param>
</filter>

c) describe a mapping for this filter in web.xml. E.g.:

<filter-mapping>
  <filter-name>SessionExpireFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
</filter-mapping>
*/


Jack


-- 
------------------------------

"You can lead a horse to water but you cannot make it float on its back."

~Dakota Jack~

"You can't wake a person who is pretending to be asleep."

~Native Proverb~

"Each man is good in His sight. It is not necessary for eagles to be crows."

~Hunkesni (Sitting Bull), Hunkpapa Sioux~

-----------------------------------------------

"This message may contain confidential and/or privileged information.
If you are not the addressee or authorized to receive this for the
addressee, you must not use, copy, disclose, or take any action based
on this message or any information herein. If you have received this
message in error, please advise the sender immediately by reply e-mail
and delete this message. Thank you for your cooperation."

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to