KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > activemq > jaas > PropertiesLoginModule


1 /**
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one or more
4  * contributor license agreements. See the NOTICE file distributed with
5  * this work for additional information regarding copyright ownership.
6  * The ASF licenses this file to You under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18 package org.apache.activemq.jaas;
19
20 import java.io.File JavaDoc;
21 import java.io.IOException JavaDoc;
22 import java.util.Enumeration JavaDoc;
23 import java.util.HashSet JavaDoc;
24 import java.util.Map JavaDoc;
25 import java.util.Properties JavaDoc;
26 import java.util.Set JavaDoc;
27
28 import javax.security.auth.Subject JavaDoc;
29 import javax.security.auth.callback.Callback JavaDoc;
30 import javax.security.auth.callback.CallbackHandler JavaDoc;
31 import javax.security.auth.callback.NameCallback JavaDoc;
32 import javax.security.auth.callback.PasswordCallback JavaDoc;
33 import javax.security.auth.callback.UnsupportedCallbackException JavaDoc;
34 import javax.security.auth.login.LoginException JavaDoc;
35 import javax.security.auth.login.FailedLoginException JavaDoc;
36 import javax.security.auth.spi.LoginModule JavaDoc;
37
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40
41
42 /**
43  * @version $Rev: $ $Date: $
44  */

45 public class PropertiesLoginModule implements LoginModule JavaDoc {
46
47     private final String JavaDoc USER_FILE = "org.apache.activemq.jaas.properties.user";
48     private final String JavaDoc GROUP_FILE = "org.apache.activemq.jaas.properties.group";
49
50     private static final Log log = LogFactory.getLog(PropertiesLoginModule.class);
51
52     private Subject JavaDoc subject;
53     private CallbackHandler JavaDoc callbackHandler;
54
55     private boolean debug;
56     private String JavaDoc usersFile;
57     private String JavaDoc groupsFile;
58     private Properties JavaDoc users = new Properties JavaDoc();
59     private Properties JavaDoc groups = new Properties JavaDoc();
60     private String JavaDoc user;
61     private Set JavaDoc principals = new HashSet JavaDoc();
62     private File JavaDoc baseDir;
63
64     public void initialize(Subject JavaDoc subject, CallbackHandler JavaDoc callbackHandler, Map JavaDoc sharedState, Map JavaDoc options) {
65         this.subject = subject;
66         this.callbackHandler = callbackHandler;
67
68         if( System.getProperty("java.security.auth.login.config")!=null ) {
69             baseDir=new File JavaDoc(System.getProperty("java.security.auth.login.config")).getParentFile();
70         } else {
71             baseDir = new File JavaDoc(".");
72         }
73
74         debug = "true".equalsIgnoreCase((String JavaDoc) options.get("debug"));
75         usersFile = (String JavaDoc) options.get(USER_FILE)+"";
76         groupsFile = (String JavaDoc) options.get(GROUP_FILE)+"";
77
78         if (debug) {
79             log.debug("Initialized debug=" + debug + " usersFile=" + usersFile + " groupsFile=" + groupsFile+" basedir="+baseDir);
80         }
81     }
82
83     public boolean login() throws LoginException JavaDoc {
84         File JavaDoc f = new File JavaDoc(baseDir,usersFile);
85         try {
86             users.load(new java.io.FileInputStream JavaDoc(f));
87         } catch (IOException JavaDoc ioe) {
88             throw new LoginException JavaDoc("Unable to load user properties file " + f);
89         }
90         f = new File JavaDoc(baseDir, groupsFile);
91         try {
92             groups.load(new java.io.FileInputStream JavaDoc(f));
93         } catch (IOException JavaDoc ioe) {
94             throw new LoginException JavaDoc("Unable to load group properties file " + f);
95         }
96
97         Callback JavaDoc[] callbacks = new Callback JavaDoc[2];
98
99         callbacks[0] = new NameCallback JavaDoc("Username: ");
100         callbacks[1] = new PasswordCallback JavaDoc("Password: ", false);
101         try {
102             callbackHandler.handle(callbacks);
103         } catch (IOException JavaDoc ioe) {
104             throw new LoginException JavaDoc(ioe.getMessage());
105         } catch (UnsupportedCallbackException JavaDoc uce) {
106             throw new LoginException JavaDoc(uce.getMessage() + " not available to obtain information from user");
107         }
108         user = ((NameCallback JavaDoc) callbacks[0]).getName();
109         char[] tmpPassword = ((PasswordCallback JavaDoc) callbacks[1]).getPassword();
110         if (tmpPassword == null) tmpPassword = new char[0];
111
112         String JavaDoc password = users.getProperty(user);
113
114         if (password == null) throw new FailedLoginException JavaDoc("User does exist");
115         if (!password.equals(new String JavaDoc(tmpPassword))) throw new FailedLoginException JavaDoc("Password does not match");
116
117         users.clear();
118
119         if (debug) {
120             log.debug("login " + user);
121         }
122         return true;
123     }
124
125     public boolean commit() throws LoginException JavaDoc {
126         principals.add(new UserPrincipal(user));
127
128         for (Enumeration JavaDoc enumeration = groups.keys(); enumeration.hasMoreElements();) {
129             String JavaDoc name = (String JavaDoc) enumeration.nextElement();
130             String JavaDoc[] userList = ((String JavaDoc) groups.getProperty(name) + "").split(",");
131             for (int i = 0; i < userList.length; i++) {
132                 if (user.equals(userList[i])) {
133                     principals.add(new GroupPrincipal(name));
134                     break;
135                 }
136             }
137         }
138
139         subject.getPrincipals().addAll(principals);
140
141         clear();
142
143         if (debug) {
144             log.debug("commit");
145         }
146         return true;
147     }
148
149     public boolean abort() throws LoginException JavaDoc {
150         clear();
151
152         if (debug) {
153             log.debug("abort");
154         }
155         return true;
156     }
157
158     public boolean logout() throws LoginException JavaDoc {
159         subject.getPrincipals().removeAll(principals);
160         principals.clear();
161
162         if (debug) {
163             log.debug("logout");
164         }
165         return true;
166     }
167
168     private void clear() {
169         groups.clear();
170         user = null;
171     }
172 }
173
Popular Tags