001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 // 021 // This source code implements specifications defined by the Java 022 // Community Process. In order to remain compliant with the specification 023 // DO NOT add / change / or delete method signatures! 024 // 025 026 package javax.security.jacc; 027 028 import java.security.SecurityPermission; 029 import java.util.Hashtable; 030 import java.util.Set; 031 032 033 /** 034 * @version $Rev: 467553 $ $Date: 2006-10-25 06:01:51 +0200 (Mi, 25. Okt 2006) $ 035 */ 036 public final class PolicyContext { 037 038 private static ThreadLocal contextId = new ThreadLocal(); 039 private static ThreadLocal handlerData = new ThreadLocal(); 040 private static Hashtable handlers = new Hashtable(); 041 private final static SecurityPermission SET_POLICY = new SecurityPermission("setPolicy"); 042 043 private PolicyContext() { 044 } 045 046 public static void setContextID(String contextID) { 047 SecurityManager sm = System.getSecurityManager(); 048 if (sm != null) sm.checkPermission(SET_POLICY); 049 050 contextId.set(contextID); 051 } 052 053 public static String getContextID() { 054 return (String) contextId.get(); 055 } 056 057 public static void setHandlerData(Object data) { 058 SecurityManager sm = System.getSecurityManager(); 059 if (sm != null) sm.checkPermission(SET_POLICY); 060 061 handlerData.set(data); 062 } 063 064 public static void registerHandler(String key, PolicyContextHandler handler, boolean replace) throws PolicyContextException { 065 if (key == null) throw new IllegalArgumentException("Key must not be null"); 066 if (handler == null) throw new IllegalArgumentException("Handler must not be null"); 067 if (!replace && handlers.containsKey(key)) throw new IllegalArgumentException("A handler has already been registered under '" + key + "' and replace is false."); 068 069 SecurityManager sm = System.getSecurityManager(); 070 if (sm != null) sm.checkPermission(SET_POLICY); 071 072 handlers.put(key, handler); 073 } 074 075 public static Set getHandlerKeys() { 076 return handlers.keySet(); 077 } 078 079 public static Object getContext(String key) throws PolicyContextException { 080 if (key == null) throw new IllegalArgumentException("Key must not be null"); 081 082 PolicyContextHandler handler = (PolicyContextHandler) handlers.get(key); 083 084 if (handler == null) throw new IllegalArgumentException("No handler can be found for the key '" + key + "'"); 085 if (!handler.supports(key)) throw new IllegalArgumentException("Registered handler no longer supports the key '" + key + "'"); 086 087 SecurityManager sm = System.getSecurityManager(); 088 if (sm != null) sm.checkPermission(SET_POLICY); 089 090 return handler.getContext(key, handlerData.get()); 091 } 092 }