Source code: org/apache/juddi/auth/JBossAuthenticator.java
1 /*
2 * Copyright 2001-2004 The Apache Software Foundation.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.apache.juddi.auth;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20 import org.apache.juddi.error.RegistryException;
21 import org.apache.juddi.error.UnknownUserException;
22 import org.apache.juddi.util.Config;
23 import org.jboss.security.AuthenticationManager;
24
25 import javax.naming.Context;
26 import javax.naming.InitialContext;
27 import javax.naming.NamingException;
28 import java.security.Principal;
29
30 /**
31 * This is a implementation of jUDDI's Authenticator interface,
32 * that uses the JBoss authentication manager.
33 *
34 * Usage:
35 *
36 * To use this class you must add the following properties
37 * to the juddi.properties file:
38 *
39 * # The JBoss Authenticator
40 * juddi.auth=org.apache.juddi.auth.JBossAuthenticator
41 *
42 * # The security-domain, defined in $JBOSS/default/conf/login-config.xml
43 * juddi.securityDomain=java:/jaas/other
44 *
45 * @author Antoni Reus (areus@ibit.org)
46 */
47 public class JBossAuthenticator implements Authenticator
48 {
49 // private reference to the jUDDI logger
50 private static Log log = LogFactory.getLog(JBossAuthenticator.class);
51
52 // static default security-domain to use.
53 private static final String SECURITY_DOMAIN_KEY = "juddi.securityDomain";
54 private static final String DEFAULT_SECURITY_DOMAIN = "java:/jaas/other";
55
56 // JBoss authentication manager
57 AuthenticationManager authManager;
58
59 /**
60 *
61 */
62 public JBossAuthenticator()
63 {
64 init();
65 }
66
67 /**
68 *
69 */
70 public String authenticate(final String userID, final String credential)
71 throws RegistryException
72 {
73 if (userID == null) {
74 throw new UnknownUserException("Invalid user ID = "+userID);
75 }
76
77 // Create a principal for the userID
78 Principal principal = new Principal()
79 {
80 public String getName() {
81 return userID;
82 }
83 };
84
85 if (!authManager.isValid(principal, credential)) {
86 throw new UnknownUserException("Invalid credentials");
87 }
88
89 return userID;
90 }
91
92
93 private void init()
94 {
95 String securityDomain = Config.getStringProperty(SECURITY_DOMAIN_KEY,DEFAULT_SECURITY_DOMAIN);
96
97 try {
98 // lookup for the authentication manager.
99 Context ctx = new InitialContext();
100 authManager = (AuthenticationManager) ctx.lookup(securityDomain);
101 ctx.close();
102 } catch (NamingException e) {
103 log.error("JNDI Exception looking for autentication manager: " +
104 securityDomain, e);
105 }
106 }
107 }