1 25 28 package org.jresearch.gossip.filters; 29 30 import java.io.IOException ; 31 import java.util.HashMap ; 32 33 import javax.servlet.Filter ; 34 import javax.servlet.FilterChain ; 35 import javax.servlet.FilterConfig ; 36 import javax.servlet.ServletException ; 37 import javax.servlet.ServletRequest ; 38 import javax.servlet.ServletResponse ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpSession ; 41 42 import org.jresearch.gossip.IConst; 43 import org.jresearch.gossip.am.StrutsConfigurationHelperAction; 44 import org.jresearch.gossip.am.StrutsPermissionMapping; 45 import org.jresearch.gossip.am.model.IPermissionGuard; 46 import org.jresearch.gossip.am.values.PermissionPoint; 47 import org.jresearch.gossip.beans.user.User; 48 import org.jresearch.gossip.configuration.Configurator; 49 import org.jresearch.gossip.constants.UserStatus; 50 import org.jresearch.gossip.exception.ConfiguratorException; 51 import org.jresearch.gossip.exception.SystemException; 52 import org.jresearch.gossip.log.LogLevel; 53 import org.jresearch.gossip.log.avalon.JGossipLog; 54 55 59 public class SignOnFilter implements Filter { 60 61 private String _signon; 62 63 private String _denied; 64 65 private FilterConfig _config; 66 67 private static HashMap permissionMapping; 68 69 72 public void init(FilterConfig config) throws ServletException { 73 _config = config; 74 75 76 _signon = config.getInitParameter("signon.action"); 77 78 _denied = config.getInitParameter("denied.action"); 79 } 80 81 85 public void doFilter(ServletRequest request, ServletResponse response, 86 FilterChain chain) throws IOException , ServletException { 87 HttpServletRequest req = (HttpServletRequest ) request; 88 89 try { 90 if (checkPermission(req)) { 91 chain.doFilter(request, response); 92 } else { 93 HttpSession session = req.getSession(); 94 JGossipLog.audit(LogLevel.WARN, (User) session 95 .getAttribute(IConst.SESSION.USER_KEY), 96 " attempted to access " + req.getRequestURI(), session); 97 if (!isSignedIn(req.getSession())) { 98 String uri = req.getRequestURI(); 99 int i = uri.lastIndexOf("/"); 100 if (i >= 0) { 101 uri = uri.substring(i); 102 } 103 request.setAttribute(IConst.REQUEST.REDIRECT_URL, uri 104 + ((req.getQueryString() != null) ? ("?" + req 105 .getQueryString()) : "")); 106 _config.getServletContext().getRequestDispatcher( 107 getSignOnUrl()).forward(request, response); 108 109 } else { 110 _config.getServletContext().getRequestDispatcher(_denied) 111 .forward(request, response); 112 } 113 } 114 } catch (SystemException e) { 115 throw new ServletException (e); 116 } 117 } 118 119 123 private String getPath(HttpServletRequest req) { 124 String uri = req.getRequestURI(); 125 126 int i = uri.lastIndexOf("/"); 127 int j = uri.lastIndexOf(".do"); 128 if (i >= 0 && j > 0) { 129 uri = uri.substring(i, j); 130 } 131 req.getSession().getServletContext().log(uri); 132 return uri; 133 } 134 135 139 private String getSignOnUrl() throws ServletException { 140 try { 141 if (IConst.VALUES.FALSE.equals(Configurator.getInstance().get( 142 IConst.CONFIG.ENABLE_FORUM_SIGN_ON))) { 143 return Configurator.getInstance().get( 144 IConst.CONFIG.EXT_LOGON_ACTION_URL); 145 } 146 } catch (ConfiguratorException e) { 147 throw new ServletException (e); 148 } 149 150 return _signon; 151 } 152 153 158 private boolean checkPermission(HttpServletRequest request) 159 throws SystemException { 160 IPermissionGuard guard = getGuard(request); 161 PermissionPoint point = getPermissionPoint(request); 162 163 if (point == null) { 164 return true; 165 } 166 return guard.checkPermission(point); 167 } 168 169 174 private IPermissionGuard getGuard(HttpServletRequest request) 175 throws SystemException { 176 177 HttpSession session = request.getSession(); 178 IPermissionGuard guard = (IPermissionGuard) session 179 .getAttribute(IConst.SESSION.PERMISSION_GUARD_KEY); 180 return guard; 181 } 182 183 187 private boolean isSignedIn(HttpSession session) { 188 User user = (User) session.getAttribute(IConst.SESSION.USER_KEY); 189 if (user.getStatus() != UserStatus.GUEST) { 190 return true; 191 } 192 193 return false; 194 } 195 196 201 private PermissionPoint getPermissionPoint(HttpServletRequest request) 202 throws SystemException { 203 if (permissionMapping == null) { 204 permissionMapping = StrutsConfigurationHelperAction 205 .retrieveStrutsActionMapping(request.getSession() 206 .getServletContext()); 207 } 208 StrutsPermissionMapping spm = (StrutsPermissionMapping) permissionMapping 209 .get(getPath(request)); 210 PermissionPoint point = null; 211 if (spm != null) { 212 point = new PermissionPoint(spm.getAmObjectId().intValue(), spm 213 .getAmOperationId().intValue()); 214 } 215 return point; 216 } 217 218 221 public void destroy() { 222 223 } 224 225 }
| Popular Tags
|