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
32 HttpServletRequest req = (HttpServletRequest) request;
33 HttpServletResponse res = (HttpServletResponse) response;
34
35 Person authenticatedUser = AuthenticatedUserManager.getAuthenticatedUser(req);
36
37 if (authenticatedUser == null) {
38
39 Configuration configuration = (Configuration) context.getAttribute("configuration");
40 if (configuration != null) {
41
42 String redirectTo = configuration.getString("userLogonPage");
43 if (redirectTo != null && redirectTo.length() > 0) {
44
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 }