KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > security > test > XMLLoginModulesUnitTestCase


1 /*
2   * JBoss, Home of Professional Open Source
3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
4   * by the @authors tag. See the copyright.txt in the distribution for a
5   * full listing of individual contributors.
6   *
7   * This is free software; you can redistribute it and/or modify it
8   * under the terms of the GNU Lesser General Public License as
9   * published by the Free Software Foundation; either version 2.1 of
10   * the License, or (at your option) any later version.
11   *
12   * This software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this software; if not, write to the Free
19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21   */

22 package org.jboss.test.security.test;
23
24 import java.util.Map JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.Set JavaDoc;
27 import java.io.InputStream JavaDoc;
28 import java.io.InputStreamReader JavaDoc;
29 import java.security.acl.Group JavaDoc;
30 import javax.security.auth.login.Configuration JavaDoc;
31 import javax.security.auth.login.AppConfigurationEntry JavaDoc;
32 import javax.security.auth.login.LoginContext JavaDoc;
33 import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;
34 import javax.security.auth.Subject JavaDoc;
35
36 import org.jboss.logging.Logger;
37
38 import org.jboss.logging.XLevel;
39 import org.jboss.security.auth.login.XMLLoginConfigImpl;
40 import org.jboss.security.auth.spi.Users;
41 import org.jboss.security.auth.login.LoginConfigObjectModelFactory;
42 import org.jboss.security.config.PolicyConfig;
43 import org.jboss.security.auth.login.AuthenticationInfo;
44 import org.jboss.security.auth.spi.UsersObjectModelFactory;
45 import org.jboss.security.auth.callback.UsernamePasswordHandler;
46 import org.jboss.security.config.ApplicationPolicy;
47 import org.jboss.security.SimplePrincipal;
48 import org.jboss.xb.binding.Unmarshaller;
49 import org.jboss.xb.binding.UnmarshallerFactory;
50
51 /**
52  * Tests of the LoginModule classes using the XMLLoginConfigImpl implementation
53  * of the JAAS login module configuration.
54  * @author Scott.Stark@jboss.org
55  * @version $Revision: 58115 $
56  */

57 public class XMLLoginModulesUnitTestCase extends LoginModulesUnitTestCase
58 {
59
60    public XMLLoginModulesUnitTestCase(String JavaDoc name)
61    {
62       super(name);
63    }
64
65    protected void setUp() throws Exception JavaDoc
66    {
67       // Setup the replacement properties
68
System.setProperty("users.properties", "/security/config/users.properites");
69       System.setProperty("roles.properties", "/security/config/roles.properites");
70
71       // Install the custom JAAS configuration
72
XMLLoginConfigImpl config = new XMLLoginConfigImpl();
73       config.setConfigResource("security/login-config.xml");
74       config.loadConfig();
75       Configuration.setConfiguration(config);
76    }
77
78    public void testPropertyReplacement() throws Exception JavaDoc
79    {
80       Configuration JavaDoc config = Configuration.getConfiguration();
81       AppConfigurationEntry JavaDoc[] entries = config.getAppConfigurationEntry("testPropertyReplacement");
82       assertTrue("entries.length == 1", entries.length == 1);
83       AppConfigurationEntry JavaDoc entry = entries[0];
84       LoginModuleControlFlag flag = entry.getControlFlag();
85       assertTrue("flag == required", flag == LoginModuleControlFlag.REQUIRED);
86       Map JavaDoc options = entry.getOptions();
87       String JavaDoc users = (String JavaDoc) options.get("usersProperties");
88       assertTrue("usersProperties(" + users + ") = /security/config/users.properites",
89          users.equals("/security/config/users.properites"));
90       String JavaDoc roles = (String JavaDoc) options.get("rolesProperties");
91       assertTrue("rolesProperties(" + roles + ") = /security/config/roles.properites",
92          roles.equals("/security/config/roles.properites"));
93    }
94
95    /**
96     * @throws Exception
97     */

98    public void testXmlLoginModuleParsing() throws Exception JavaDoc
99    {
100       LoginConfigObjectModelFactory lcomf = new LoginConfigObjectModelFactory();
101       UsersObjectModelFactory uomf = new UsersObjectModelFactory();
102
103       InputStream JavaDoc is = Thread.currentThread().getContextClassLoader().getResourceAsStream("security/login-config2.xml");
104       InputStreamReader JavaDoc xmlReader = new InputStreamReader JavaDoc(is);
105       Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
106       unmarshaller.mapFactoryToNamespace(uomf, "http://www.jboss.org/j2ee/schemas/XMLLoginModule");
107       PolicyConfig config = (PolicyConfig) unmarshaller.unmarshal(xmlReader, lcomf, null);
108       ApplicationPolicy aPolicy = (ApplicationPolicy)config.get("testXMLLoginModule");
109       AuthenticationInfo info = (AuthenticationInfo)aPolicy.getAuthenticationInfo();
110       assertTrue("test-xml-config != null", info != null);
111       AppConfigurationEntry JavaDoc[] entries = info.getAppConfigurationEntry();
112       assertTrue("entries.length == 1", entries.length == 1);
113       AppConfigurationEntry JavaDoc ace = entries[0];
114       assertTrue("org.jboss.security.auth.spi.XMLLoginModule",
115          ace.getLoginModuleName().equals("org.jboss.security.auth.spi.XMLLoginModule"));
116       Map JavaDoc options = ace.getOptions();
117       assertTrue("Options.size == 2", options.size() == 2);
118       String JavaDoc guest = (String JavaDoc) options.get("unauthenticatedIdentity");
119       assertTrue("guest", guest.equals("guest"));
120       Users users = (Users) options.get("userInfo");
121       Users.User user = users.getUser("jdukeman");
122       String JavaDoc name = user.getName();
123       assertTrue("name == jdukeman", name.equals("jdukeman"));
124       String JavaDoc passwrd = user.getPassword();
125       assertTrue("passwrd == anotherduke", passwrd.equals("anotherduke"));
126       String JavaDoc[] roleNames = user.getRoleNames();
127       assertTrue("roles in (Role2, Role3)",
128          roleNames[0].equals("Role2") && roleNames[1].equals("Role3"));
129
130       aPolicy = (ApplicationPolicy)config.get("testNoModuleOptions");
131       AuthenticationInfo testNoModuleOptions = (AuthenticationInfo)aPolicy.getAuthenticationInfo();
132      // AuthenticationInfo testNoModuleOptions = (AuthenticationInfo) config.get("testNoModuleOptions");
133
assertTrue("testNoModuleOptions != null", testNoModuleOptions != null);
134       AppConfigurationEntry JavaDoc[] testNoModuleOptionsEntries = testNoModuleOptions.getAppConfigurationEntry();
135       assertTrue("entries.length == 1", testNoModuleOptionsEntries.length == 1);
136       AppConfigurationEntry JavaDoc testNoModuleOptionsACE = testNoModuleOptionsEntries[0];
137       assertTrue("org.jboss.security.auth.spi.XMLLoginModule",
138          testNoModuleOptionsACE.getLoginModuleName().equals("org.jboss.security.auth.spi.XMLLoginModule"));
139       Map JavaDoc testNoModuleOptionsMap = testNoModuleOptionsACE.getOptions();
140       assertTrue("testNoModuleOptionsMap.size("+testNoModuleOptionsMap+") == 0", testNoModuleOptionsMap.size() == 0);
141    }
142
143    public void testXMLLoginModule() throws Exception JavaDoc
144    {
145       getLog().info("testXMLLoginModule");
146       // Install the custom JAAS configuration
147
XMLLoginConfigImpl config = new XMLLoginConfigImpl();
148       config.setConfigResource("security/login-config2.xml");
149       config.loadConfig();
150       Configuration.setConfiguration(config);
151
152       AppConfigurationEntry JavaDoc[] entry = config.getAppConfigurationEntry("testXMLLoginModule");
153       assertTrue("Found testXMLLoginModule", entry != null);
154       getLog().info("testXMLLoginModule options: "+entry[0].getOptions());
155       AppConfigurationEntry JavaDoc[] entry2 = config.getAppConfigurationEntry("testXMLLoginModule2");
156       assertTrue("Found testXMLLoginModule2", entry2 != null);
157       getLog().info("testXMLLoginModule2 options: "+entry2[0].getOptions());
158
159       UsernamePasswordHandler handler = new UsernamePasswordHandler("scott", "echoman".toCharArray());
160       LoginContext JavaDoc lc = new LoginContext JavaDoc("testXMLLoginModule", handler);
161       lc.login();
162       Subject JavaDoc subject = lc.getSubject();
163       Set JavaDoc groups = subject.getPrincipals(Group JavaDoc.class);
164       assertTrue("Principals contains scott", subject.getPrincipals().contains(new SimplePrincipal("scott")));
165       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
166       assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal")));
167       Group JavaDoc roles = (Group JavaDoc) groups.iterator().next();
168       Iterator JavaDoc groupsIter = groups.iterator();
169       while (groupsIter.hasNext())
170       {
171          roles = (Group JavaDoc) groupsIter.next();
172          if (roles.getName().equals("Roles"))
173          {
174             assertTrue("Echo is a role", roles.isMember(new SimplePrincipal("Echo")));
175             assertTrue("Java is NOT a role", roles.isMember(new SimplePrincipal("Java")) == false);
176             assertTrue("Coder is NOT a role", roles.isMember(new SimplePrincipal("Coder")) == false);
177          }
178          else if (roles.getName().equals("CallerPrincipal"))
179          {
180             getLog().info("CallerPrincipal is " + roles.members().nextElement());
181             boolean isMember = roles.isMember(new SimplePrincipal("callerScott"));
182             assertTrue("CallerPrincipal is callerScott", isMember);
183          }
184       }
185       lc.logout();
186
187       handler = new UsernamePasswordHandler("stark", "javaman".toCharArray());
188       lc = new LoginContext JavaDoc("testXMLLoginModule", handler);
189       lc.login();
190       subject = lc.getSubject();
191       groups = subject.getPrincipals(Group JavaDoc.class);
192       assertTrue("Principals contains stark", subject.getPrincipals().contains(new SimplePrincipal("stark")));
193       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
194       assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal")));
195       groupsIter = groups.iterator();
196       while (groupsIter.hasNext())
197       {
198          roles = (Group JavaDoc) groupsIter.next();
199          if (roles.getName().equals("Roles"))
200          {
201             assertTrue("Echo is NOT a role", roles.isMember(new SimplePrincipal("Echo")) == false);
202             assertTrue("Java is a role", roles.isMember(new SimplePrincipal("Java")));
203             assertTrue("Coder is a role", roles.isMember(new SimplePrincipal("Coder")));
204          }
205          else if (roles.getName().equals("CallerPrincipal"))
206          {
207             getLog().info("CallerPrincipal is " + roles.members().nextElement());
208             boolean isMember = roles.isMember(new SimplePrincipal("callerStark"));
209             assertTrue("CallerPrincipal is callerStark", isMember);
210          }
211       }
212       lc.logout();
213
214       // Test the usernames with common prefix
215
getLog().info("Testing similar usernames");
216       handler = new UsernamePasswordHandler("jdukeman", "anotherduke".toCharArray());
217       lc = new LoginContext JavaDoc("testXMLLoginModule", handler);
218       lc.login();
219       subject = lc.getSubject();
220       groups = subject.getPrincipals(Group JavaDoc.class);
221       assertTrue("Principals contains jdukeman", subject.getPrincipals().contains(new SimplePrincipal("jdukeman")));
222       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
223       assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal")));
224       groupsIter = groups.iterator();
225       while (groupsIter.hasNext())
226       {
227          roles = (Group JavaDoc) groupsIter.next();
228          if (roles.getName().equals("Roles"))
229          {
230             assertTrue("Role1 is NOT a role", roles.isMember(new SimplePrincipal("Role1")) == false);
231             assertTrue("Role2 is a role", roles.isMember(new SimplePrincipal("Role2")));
232             assertTrue("Role3 is a role", roles.isMember(new SimplePrincipal("Role3")));
233          }
234          else if (roles.getName().equals("CallerPrincipal"))
235          {
236             getLog().info("CallerPrincipal is " + roles.members().nextElement());
237             boolean isMember = roles.isMember(new SimplePrincipal("callerJdukeman"));
238             assertTrue("CallerPrincipal is callerJdukeman", isMember);
239          }
240       }
241       lc.logout();
242
243       handler = new UsernamePasswordHandler("scott2", "echoman2".toCharArray());
244       lc = new LoginContext JavaDoc("testXMLLoginModule2", handler);
245       lc.login();
246       subject = lc.getSubject();
247       groups = subject.getPrincipals(Group JavaDoc.class);
248       assertTrue("Principals contains scott2", subject.getPrincipals().contains(new SimplePrincipal("scott2")));
249       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
250       assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal")));
251       groupsIter = groups.iterator();
252       while (groupsIter.hasNext())
253       {
254          roles = (Group JavaDoc) groupsIter.next();
255          if (roles.getName().equals("Roles"))
256          {
257             assertTrue("Echo2 is a role", roles.isMember(new SimplePrincipal("Echo2")));
258             assertTrue("Java is NOT a role", roles.isMember(new SimplePrincipal("Java")) == false);
259             assertTrue("Coder is NOT a role", roles.isMember(new SimplePrincipal("Coder")) == false);
260          }
261          else if (roles.getName().equals("CallerPrincipal"))
262          {
263             getLog().info("CallerPrincipal is " + roles.members().nextElement());
264             boolean isMember = roles.isMember(new SimplePrincipal("callerScott2"));
265             assertTrue("CallerPrincipal is callerScott2", isMember);
266          }
267       }
268       lc.logout();
269    }
270
271    public void testRoleMapping() throws Exception JavaDoc
272    {
273       getLog().info("testRoleMapping");
274       // Install the custom JAAS configuration
275
XMLLoginConfigImpl config = new XMLLoginConfigImpl();
276       config.setConfigResource("security/login-config2.xml");
277       config.loadConfig();
278       Configuration.setConfiguration(config);
279
280       UsernamePasswordHandler handler = new UsernamePasswordHandler("jduke", "theduke".toCharArray());
281       LoginContext JavaDoc lc = new LoginContext JavaDoc("testRoleMapping", handler);
282       lc.login();
283       Subject JavaDoc subject = lc.getSubject();
284       Set JavaDoc groups = subject.getPrincipals(Group JavaDoc.class);
285       assertTrue("Principals contains jduke", subject.getPrincipals().contains(new SimplePrincipal("jduke")));
286       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
287       Group JavaDoc roles = (Group JavaDoc) groups.iterator().next();
288       Iterator JavaDoc groupsIter = groups.iterator();
289       while (groupsIter.hasNext())
290       {
291          roles = (Group JavaDoc) groupsIter.next();
292          if (roles.getName().equals("Roles"))
293          {
294             assertTrue("Role2 is a role", roles.isMember(new SimplePrincipal("Role2")));
295             assertTrue("Role3 is a role", roles.isMember(new SimplePrincipal("Role3")));
296          }
297       }
298       lc.logout();
299
300       handler = new UsernamePasswordHandler("jduke2", "theduke2".toCharArray());
301       lc = new LoginContext JavaDoc("testRoleMapping", handler);
302       lc.login();
303       subject = lc.getSubject();
304       groups = subject.getPrincipals(Group JavaDoc.class);
305       assertTrue("Principals contains jduke2", subject.getPrincipals().contains(new SimplePrincipal("jduke2")));
306       assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles")));
307       roles = (Group JavaDoc) groups.iterator().next();
308       groupsIter = groups.iterator();
309       while (groupsIter.hasNext())
310       {
311          roles = (Group JavaDoc) groupsIter.next();
312          if (roles.getName().equals("Roles"))
313          {
314             assertTrue("Role1 is a role", roles.isMember(new SimplePrincipal("Role1")));
315          }
316       }
317       lc.logout();
318
319    }
320 }
321
Popular Tags