00001
00027 package org.objectweb.jonas.security.jacc;
00028
00029 import javax.security.jacc.PolicyContextException;
00030 import javax.security.jacc.PolicyContextHandler;
00031
00032 import org.objectweb.jonas.common.Log;
00033
00034 import org.objectweb.util.monolog.api.BasicLevel;
00035 import org.objectweb.util.monolog.api.Logger;
00036
00043 public class JPolicyContextHandler implements PolicyContextHandler {
00044
00049 private static final String CONTAINER_SUBJECT = "javax.security.auth.Subject.container";
00050
00055 private static final String SOAP_MESSAGE = "javax.xml.soap.SOAPMessage";
00056
00061 private static final String HTTP_SERVLET_REQUEST = "javax.servlet.http.HttpServletRequest";
00062
00067 private static final String ENTERPRISE_BEAN = "javax.ejb.EnterpriseBean";
00068
00073 private static final String EJB_ARGUMENTS = "javax.ejb.arguments";
00074
00078 private static final String[] SUPPORTED_KEYS = new String[] {CONTAINER_SUBJECT, SOAP_MESSAGE, HTTP_SERVLET_REQUEST,
00079 ENTERPRISE_BEAN, EJB_ARGUMENTS};
00080
00084 private static Logger logger = Log.getLogger(Log.JONAS_JACC_SECURITY_PREFIX);
00085
00089 public JPolicyContextHandler() {
00090 super();
00091
00092 }
00093
00100 public boolean supports(String key) throws PolicyContextException {
00101 for (int k = 0; k < SUPPORTED_KEYS.length; k++) {
00102 if (key.equals(SUPPORTED_KEYS[k])) {
00103 return true;
00104 }
00105 }
00106 return false;
00107 }
00108
00113 public String[] getKeys() throws PolicyContextException {
00114 return SUPPORTED_KEYS;
00115 }
00116
00125 public Object getContext(String key, Object data) throws PolicyContextException {
00126
00127 if (logger.isLoggable(BasicLevel.DEBUG)) {
00128 logger.log(BasicLevel.DEBUG, "Asking key" + key);
00129 }
00130
00131
00132 if (data == null || !(data instanceof JPolicyContextHandlerData)) {
00133 logger.log(BasicLevel.WARN, "No data object or Data object not instance of JPolicyContextHandlerData");
00134 return null;
00135 }
00136
00137 Object contextObject = null;
00138 JPolicyContextHandlerData jPolicyContextHandlerData = (JPolicyContextHandlerData) data;
00139
00140 if (key.equals(HTTP_SERVLET_REQUEST)) {
00141 if (logger.isLoggable(BasicLevel.DEBUG)) {
00142 logger.log(BasicLevel.DEBUG, "Key == '" + HTTP_SERVLET_REQUEST + "'");
00143 }
00144 contextObject = jPolicyContextHandlerData.getHttpServletRequest();
00145 } else if (key.equals(EJB_ARGUMENTS)) {
00146 if (logger.isLoggable(BasicLevel.DEBUG)) {
00147 logger.log(BasicLevel.DEBUG, "Key == '" + EJB_ARGUMENTS + "'");
00148 }
00149 contextObject = jPolicyContextHandlerData.getEjbArguments();
00150 } else if (key.equals(CONTAINER_SUBJECT)) {
00151 if (logger.isLoggable(BasicLevel.DEBUG)) {
00152 logger.log(BasicLevel.DEBUG, "Key == '" + CONTAINER_SUBJECT + "'");
00153 }
00154 contextObject = jPolicyContextHandlerData.getContainerSubject();
00155
00156 }
00157
00158 if (logger.isLoggable(BasicLevel.DEBUG)) {
00159 logger.log(BasicLevel.DEBUG, "Returning object '" + contextObject + "' for key '" + key + "'");
00160 }
00161 return contextObject;
00162
00163 }
00164
00165 }