View Javadoc

1   package org.restafarian.core.filters;
2   
3   import java.io.IOException;
4   import java.net.URLEncoder;
5   
6   import javax.servlet.FilterChain;
7   import javax.servlet.ServletException;
8   import javax.servlet.ServletRequest;
9   import javax.servlet.ServletResponse;
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  
13  import org.apache.commons.configuration.Configuration;
14  import org.restafarian.core.beans.Person;
15  import org.restafarian.core.security.AuthenticatedUserManager;
16  
17  /***
18   * <p>This filter redirects all traffic to a specified page if
19   * the authenticated user object is not present.</p>
20   */
21  public class SecurityFilter extends FilterBase {
22  
23  	/***
24  	 * <p>Filter "do filter" method.</p>
25  	 *
26  	 * @param req the servlet request object
27  	 * @param res the servlet response object
28  	 * @param chain the filter chain object
29  	 */
30  	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
31  		// convert request and response objects
32  		HttpServletRequest req = (HttpServletRequest) request;
33  		HttpServletResponse res = (HttpServletResponse) response;
34  		// get authenticated user using configured manager
35  		Person authenticatedUser = AuthenticatedUserManager.getAuthenticatedUser(req);
36  
37  		if (authenticatedUser == null) {
38  			// no authenticated user -- redirect to the logon page
39  			Configuration configuration = (Configuration) context.getAttribute("configuration");
40  			if (configuration != null) {
41  				// get logon page from configuration
42  				String redirectTo = configuration.getString("userLogonPage");
43  				if (redirectTo != null && redirectTo.length() > 0) {
44  					// get the current URL for the return path
45  					String originalURL = req.getRequestURI();
46  					String connector = "?";
47  					if (redirectTo.indexOf("?") != -1) {
48  						connector = "&";
49  					}
50  					redirectTo += connector + "returnurl=" + URLEncoder.encode(originalURL, "ISO-8859-1");
51  					res.sendRedirect(redirectTo);
52  				} else {
53  					throw new ServletException("SecurityFilter has not been properly initialized -- check configuration.");
54  				}
55  			} else {
56  				throw new ServletException("SecurityFilter has not been properly initialized -- check configuration.");
57  			}
58  		}
59  
60  		chain.doFilter(req, res);
61  	}
62  }