mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-03-03 20:09:18 +00:00
SEC-236: Use interface instead of concrete class for JbossAcegiLoginModule.
This commit is contained in:
parent
540c7b2e6a
commit
942bdbfad3
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -29,9 +29,11 @@ import org.jboss.security.SimpleGroup;
|
|||||||
import org.jboss.security.SimplePrincipal;
|
import org.jboss.security.SimplePrincipal;
|
||||||
import org.jboss.security.auth.spi.AbstractServerLoginModule;
|
import org.jboss.security.auth.spi.AbstractServerLoginModule;
|
||||||
|
|
||||||
import org.springframework.beans.factory.access.*;
|
import org.springframework.beans.factory.access.BeanFactoryLocator;
|
||||||
|
import org.springframework.beans.factory.access.BeanFactoryReference;
|
||||||
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
|
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
@ -73,6 +75,67 @@ public class JbossAcegiLoginModule extends AbstractServerLoginModule {
|
|||||||
|
|
||||||
//~ Methods ================================================================
|
//~ Methods ================================================================
|
||||||
|
|
||||||
|
protected Principal getIdentity() {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Group[] getRoleSets() throws LoginException {
|
||||||
|
SimpleGroup roles = new SimpleGroup("Roles");
|
||||||
|
Group[] roleSets = {roles};
|
||||||
|
|
||||||
|
if (this.identity instanceof Authentication) {
|
||||||
|
Authentication user = (Authentication) this.identity;
|
||||||
|
|
||||||
|
for (int i = 0; i < user.getAuthorities().length; i++) {
|
||||||
|
roles.addMember(new SimplePrincipal(
|
||||||
|
user.getAuthorities()[i].getAuthority()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return roleSets;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String[] getUsernameAndPassword() throws LoginException {
|
||||||
|
String[] info = {null, null};
|
||||||
|
|
||||||
|
// prompt for a username and password
|
||||||
|
if (callbackHandler == null) {
|
||||||
|
throw new LoginException("Error: no CallbackHandler available "
|
||||||
|
+ "to collect authentication information");
|
||||||
|
}
|
||||||
|
|
||||||
|
NameCallback nc = new NameCallback("User name: ", "guest");
|
||||||
|
PasswordCallback pc = new PasswordCallback("Password: ", false);
|
||||||
|
Callback[] callbacks = {nc, pc};
|
||||||
|
String username = null;
|
||||||
|
String password = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
callbackHandler.handle(callbacks);
|
||||||
|
username = nc.getName();
|
||||||
|
|
||||||
|
char[] tmpPassword = pc.getPassword();
|
||||||
|
|
||||||
|
if (tmpPassword != null) {
|
||||||
|
credential = new char[tmpPassword.length];
|
||||||
|
System.arraycopy(tmpPassword, 0, credential, 0,
|
||||||
|
tmpPassword.length);
|
||||||
|
pc.clearPassword();
|
||||||
|
password = new String(credential);
|
||||||
|
}
|
||||||
|
} catch (java.io.IOException ioe) {
|
||||||
|
throw new LoginException(ioe.toString());
|
||||||
|
} catch (UnsupportedCallbackException uce) {
|
||||||
|
throw new LoginException("CallbackHandler does not support: "
|
||||||
|
+ uce.getCallback());
|
||||||
|
}
|
||||||
|
|
||||||
|
info[0] = username;
|
||||||
|
info[1] = password;
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
public void initialize(Subject subject, CallbackHandler callbackHandler,
|
public void initialize(Subject subject, CallbackHandler callbackHandler,
|
||||||
Map sharedState, Map options) {
|
Map sharedState, Map options) {
|
||||||
super.initialize(subject, callbackHandler, sharedState, options);
|
super.initialize(subject, callbackHandler, sharedState, options);
|
||||||
@ -101,7 +164,8 @@ public class JbossAcegiLoginModule extends AbstractServerLoginModule {
|
|||||||
|
|
||||||
// Attempt to find the appContextLocation only if no singletonId was defined
|
// Attempt to find the appContextLocation only if no singletonId was defined
|
||||||
if ((singletonId == null) || "".equals(singletonId)) {
|
if ((singletonId == null) || "".equals(singletonId)) {
|
||||||
if (Thread.currentThread().getContextClassLoader().getResource(appContextLocation) == null) {
|
if (Thread.currentThread().getContextClassLoader()
|
||||||
|
.getResource(appContextLocation) == null) {
|
||||||
if (super.log.isInfoEnabled()) {
|
if (super.log.isInfoEnabled()) {
|
||||||
super.log.info("cannot locate " + appContextLocation);
|
super.log.info("cannot locate " + appContextLocation);
|
||||||
}
|
}
|
||||||
@ -111,7 +175,7 @@ public class JbossAcegiLoginModule extends AbstractServerLoginModule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassPathXmlApplicationContext ctx = null;
|
ApplicationContext ctx = null;
|
||||||
|
|
||||||
if ((singletonId == null) || "".equals(singletonId)) {
|
if ((singletonId == null) || "".equals(singletonId)) {
|
||||||
try {
|
try {
|
||||||
@ -133,7 +197,7 @@ public class JbossAcegiLoginModule extends AbstractServerLoginModule {
|
|||||||
|
|
||||||
BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();
|
BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();
|
||||||
BeanFactoryReference bf = bfl.useBeanFactory(singletonId);
|
BeanFactoryReference bf = bfl.useBeanFactory(singletonId);
|
||||||
ctx = (ClassPathXmlApplicationContext) bf.getFactory();
|
ctx = (ApplicationContext) bf.getFactory();
|
||||||
|
|
||||||
if (ctx == null) {
|
if (ctx == null) {
|
||||||
if (super.log.isInfoEnabled()) {
|
if (super.log.isInfoEnabled()) {
|
||||||
@ -260,65 +324,4 @@ public class JbossAcegiLoginModule extends AbstractServerLoginModule {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Principal getIdentity() {
|
|
||||||
return this.identity;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Group[] getRoleSets() throws LoginException {
|
|
||||||
SimpleGroup roles = new SimpleGroup("Roles");
|
|
||||||
Group[] roleSets = {roles};
|
|
||||||
|
|
||||||
if (this.identity instanceof Authentication) {
|
|
||||||
Authentication user = (Authentication) this.identity;
|
|
||||||
|
|
||||||
for (int i = 0; i < user.getAuthorities().length; i++) {
|
|
||||||
roles.addMember(new SimplePrincipal(
|
|
||||||
user.getAuthorities()[i].getAuthority()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return roleSets;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String[] getUsernameAndPassword() throws LoginException {
|
|
||||||
String[] info = {null, null};
|
|
||||||
|
|
||||||
// prompt for a username and password
|
|
||||||
if (callbackHandler == null) {
|
|
||||||
throw new LoginException("Error: no CallbackHandler available "
|
|
||||||
+ "to collect authentication information");
|
|
||||||
}
|
|
||||||
|
|
||||||
NameCallback nc = new NameCallback("User name: ", "guest");
|
|
||||||
PasswordCallback pc = new PasswordCallback("Password: ", false);
|
|
||||||
Callback[] callbacks = {nc, pc};
|
|
||||||
String username = null;
|
|
||||||
String password = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
callbackHandler.handle(callbacks);
|
|
||||||
username = nc.getName();
|
|
||||||
|
|
||||||
char[] tmpPassword = pc.getPassword();
|
|
||||||
|
|
||||||
if (tmpPassword != null) {
|
|
||||||
credential = new char[tmpPassword.length];
|
|
||||||
System.arraycopy(tmpPassword, 0, credential, 0,
|
|
||||||
tmpPassword.length);
|
|
||||||
pc.clearPassword();
|
|
||||||
password = new String(credential);
|
|
||||||
}
|
|
||||||
} catch (java.io.IOException ioe) {
|
|
||||||
throw new LoginException(ioe.toString());
|
|
||||||
} catch (UnsupportedCallbackException uce) {
|
|
||||||
throw new LoginException("CallbackHandler does not support: "
|
|
||||||
+ uce.getCallback());
|
|
||||||
}
|
|
||||||
|
|
||||||
info[0] = username;
|
|
||||||
info[1] = password;
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user