01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */package org.apache.openejb.core.security.jacc;
17:
18: import org.apache.openejb.core.security.JaccProvider;
19:
20: import javax.security.jacc.PolicyConfiguration;
21: import javax.security.jacc.PolicyContextException;
22: import javax.security.jacc.PolicyContext;
23: import java.security.PermissionCollection;
24: import java.security.CodeSource;
25: import java.security.Policy;
26: import java.security.ProtectionDomain;
27: import java.security.Permission;
28: import java.util.Map;
29: import java.util.HashMap;
30:
31: /**
32: * @version $Rev: 602704 $ $Date: 2007-12-09 09:58:22 -0800 $
33: */
34: public class BasicJaccProvider extends JaccProvider {
35:
36: private Map<String, BasicPolicyConfiguration> configurations = new HashMap<String, BasicPolicyConfiguration>();
37:
38: private final java.security.Policy systemPolicy;
39:
40: public BasicJaccProvider() {
41: systemPolicy = Policy.getPolicy();
42: }
43:
44: public PolicyConfiguration getPolicyConfiguration(String contextID,
45: boolean remove) throws PolicyContextException {
46: BasicPolicyConfiguration configuration = (BasicPolicyConfiguration) configurations
47: .get(contextID);
48:
49: if (configuration == null) {
50: configuration = new BasicPolicyConfiguration(contextID);
51: configurations.put(contextID, configuration);
52: } else {
53: configuration.open(remove);
54: }
55:
56: return configuration;
57: }
58:
59: public boolean inService(String contextID)
60: throws PolicyContextException {
61: PolicyConfiguration configuration = getPolicyConfiguration(
62: contextID, false);
63: return configuration.inService();
64: }
65:
66: public PermissionCollection getPermissions(CodeSource codesource) {
67: return systemPolicy == null ? null : systemPolicy
68: .getPermissions(codesource);
69: }
70:
71: public void refresh() {
72: }
73:
74: public boolean implies(ProtectionDomain domain,
75: Permission permission) {
76: String contextID = PolicyContext.getContextID();
77:
78: if (contextID != null) {
79: try {
80: BasicPolicyConfiguration configuration = configurations
81: .get(contextID);
82:
83: if (configuration == null || !configuration.inService())
84: return false;
85:
86: return configuration.implies(domain, permission);
87: } catch (PolicyContextException e) {
88: }
89: }
90:
91: return (systemPolicy != null) ? systemPolicy.implies(domain,
92: permission) : false;
93: }
94: }
|