Dictionary/src/java/org/thdl/lex/AuthenticationFilter.java

144 lines
3.6 KiB
Java

package org.thdl.lex;
import java.io.IOException;
import java.util.Enumeration;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Description of the Class
*
* @author travis
* @created October 21, 2003
*/
public class AuthenticationFilter implements Filter {
//attributes
private String loginPage;
//accessors
/**
* Sets the loginPage attribute of the AuthenticationFilter object
*
* @param loginPage
* The new loginPage value
*/
public void setLoginPage(String loginPage) {
this.loginPage = loginPage;
}
/**
* Gets the loginPage attribute of the AuthenticationFilter object
*
* @return The loginPage value
*/
public String getLoginPage() {
return loginPage;
}
//contract methods
/**
* Description of the Method
*
* @param config
* Description of the Parameter
* @exception ServletException
* Description of the Exception
*/
public void init(FilterConfig config) throws ServletException {
setLoginPage(config.getInitParameter("loginPage"));
if (null == getLoginPage()) {
throw new ServletException(
"The loginPage parameter must be specified");
}
}
/**
* Description of the Method
*
* @param request
* Description of the Parameter
* @param response
* Description of the Parameter
* @param chain
* Description of the Parameter
* @exception IOException
* Description of the Exception
* @exception ServletException
* Description of the Exception
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest
&& response instanceof HttpServletResponse) {
HttpServletRequest req = (HttpServletRequest) request;
Visit visit = UserSessionManager.getInstance().getVisit(
req.getSession(true));
LexUser user = visit.getUser();
if (null == user) {
requireLogin(req, (HttpServletResponse) response, req
.getSession(true));
} else {
chain.doFilter(request, response);
}
} else {
throw new ServletException(
"Filter only applicable to HTTP and HTTPS requests");
}
}
/**
* Description of the Method
*/
public void destroy() {
}
//helper methods
/**
* Description of the Method
*
* @param request
* Description of the Parameter
* @param response
* Description of the Parameter
* @param session
* Description of the Parameter
* @exception IOException
* Description of the Exception
*/
public void requireLogin(HttpServletRequest request,
HttpServletResponse response, HttpSession session)
throws IOException {
StringBuffer buffer = request.getRequestURL();
String query = request.getQueryString();
Enumeration params = request.getParameterNames();
boolean paramsExist;
if (params.hasMoreElements()) {
paramsExist = true;
buffer.append('?');
while (params.hasMoreElements()) {
String temp = (String) params.nextElement();
buffer.append(temp + "=" + request.getParameter(temp));
if (params.hasMoreElements()) {
buffer.append("&");
}
}
} else {
paramsExist = false;
}
UserSessionManager.getInstance().setSessionLoginTarget(session,
buffer.toString());
UserSessionManager.doRedirect(request, response, loginPage);
}
}