Author: ate
Date: Sat Apr 3 18:10:56 2010
New Revision: 930553
URL: http://svn.apache.org/viewvc?rev=930553&view=rev
Log:
JS2-1143: New LDAP UserPasswordCredentialManager providing LDAP authentication,
maintenance of LDAP credentials and UserPasswordCredentialPolicyManager support
- fix creation of new PasswordCredential for first time users synchronized from
LDAP
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/LdapUserPasswordCredentialManagerImpl.java
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/LdapUserPasswordCredentialManagerImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/LdapUserPasswordCredentialManagerImpl.java?rev=930553&r1=930552&r2=930553&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/LdapUserPasswordCredentialManagerImpl.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/impl/LdapUserPasswordCredentialManagerImpl.java
Sat Apr 3 18:10:56 2010
@@ -33,6 +33,7 @@ import org.apache.jetspeed.security.Jets
import org.apache.jetspeed.security.PasswordCredential;
import org.apache.jetspeed.security.SecurityException;
import org.apache.jetspeed.security.User;
+import org.apache.jetspeed.security.UserManager;
import
org.apache.jetspeed.security.spi.AlgorithmUpgradeCredentialPasswordEncoder;
import org.apache.jetspeed.security.spi.JetspeedSecuritySynchronizer;
import org.apache.jetspeed.security.spi.UserPasswordCredentialAccessManager;
@@ -40,6 +41,8 @@ import org.apache.jetspeed.security.spi.
import org.apache.jetspeed.security.spi.UserPasswordCredentialPolicyManager;
import org.apache.jetspeed.security.spi.UserPasswordCredentialStorageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.filter.AndFilter;
import org.springframework.ldap.filter.EqualsFilter;
@@ -55,9 +58,12 @@ public class LdapUserPasswordCredentialM
{
private static final long serialVersionUID = 1131764631931510796L;
+ static final Logger log =
LoggerFactory.getLogger(UserPasswordCredentialManager.class);
+
private UserPasswordCredentialStorageManager upcsm;
private UserPasswordCredentialAccessManager upcam;
private UserPasswordCredentialPolicyManager upcpm;
+ private UserManager um;
private JetspeedSecuritySynchronizer synchronizer;
private PoolingContextSource poolingContextsource;
private String userEntryPrefix;
@@ -187,6 +193,11 @@ public class LdapUserPasswordCredentialM
}
}
+ public void setUserManager(UserManager um)
+ {
+ this.um = um;
+ }
+
public void setJetspeedSecuritySynchronizer(JetspeedSecuritySynchronizer
synchronizer)
{
this.synchronizer = synchronizer;
@@ -245,7 +256,11 @@ public class LdapUserPasswordCredentialM
String password = credential.getPassword();
boolean encoded = credential.isEncoded();
- if (isNewPasswordSet && !SynchronizationStateAccess.isSynchronizing())
+ if (SynchronizationStateAccess.isSynchronizing())
+ {
+ authenticated = true;
+ }
+ else if (isNewPasswordSet)
{
userDn = getUserDn(credential.getUserName());
if (oldPassword != null)
@@ -287,8 +302,22 @@ public class LdapUserPasswordCredentialM
}
}
PasswordCredential credential = isPersistCredentials() ?
upcam.getPasswordCredential(userName) : new PasswordCredentialImpl();
+ if (credential == null)
+ {
+ credential = new PasswordCredentialImpl();
+ // persistCredentials but user credentials not yet
synchronized/stored
+ if (um == null)
+ {
+ log.error("New User PasswordCredential cannot be persisted:
requires UserManager to be set!!!");
+ }
+ else
+ {
+ // to be able to store the new password credential it needs
the User to be set
+
((PasswordCredentialImpl)credential).setUser(um.getUser(userName));
+ }
+ }
boolean setPassword = false;
- if (isPersistCredentials())
+ if (isPersistCredentials() && (!credential.isNew() ||
credential.getUser() != null))
{
if (credential.isNew())
{
@@ -326,8 +355,7 @@ public class LdapUserPasswordCredentialM
finally
{
SynchronizationStateAccess.setSynchronizing(synchronizing
? Boolean.TRUE : Boolean.FALSE);
- }
- credential = upcam.getPasswordCredential(userName);
+ }
}
if (upcpm != null)
@@ -353,22 +381,24 @@ public class LdapUserPasswordCredentialM
}
}
}
- if (!credential.isNew())
- {
- try
- {
- upcam.loadPasswordCredentialUser(credential);
+ if (credential.getUser() == null)
+ {
+ if (!credential.isNew())
+ {
+ try
+ {
+ upcam.loadPasswordCredentialUser(credential);
+ }
+ catch (Exception e)
+ {
+ throw new
SecurityException(SecurityException.PRINCIPAL_DOES_NOT_EXIST.createScoped(JetspeedPrincipalType.USER,
userName), e);
+ }
}
- catch (Exception e)
+ else
{
- throw new
SecurityException(SecurityException.PRINCIPAL_DOES_NOT_EXIST.createScoped(JetspeedPrincipalType.USER,
userName), e);
- }
- }
- else
- {
- ((PasswordCredentialImpl)credential).setUserName(userName);
+ ((PasswordCredentialImpl)credential).setUserName(userName);
+ }
}
-
return credential;
}
}
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml?rev=930553&r1=930552&r2=930553&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
Sat Apr 3 18:10:56 2010
@@ -19,9 +19,9 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
id="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLdapStorageManager"
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLdapStorageManager">
- <meta key="j2:cat" value="ldapSecurity" />
- <constructor-arg index="0"
ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager" />
- <constructor-arg index="1"
ref="org.apache.jetspeed.security.mapping.SecurityEntityManager" />
+ <meta key="j2:cat" value="ldapSecurity" />
+ <constructor-arg index="0"
ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager" />
+ <constructor-arg index="1"
ref="org.apache.jetspeed.security.mapping.SecurityEntityManager" />
</bean>
<bean id="org.apache.jetspeed.security.spi.JetspeedPrincipalStorageManager"
parent="baseTransactionProxy">
@@ -40,15 +40,15 @@
</bean>
<bean
id="org.apache.jetspeed.security.spi.JetspeedPrincipalAssociationStorageManager"
-
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLdapAssociationStorageManager">
- <meta key="j2:cat" value="ldapSecurity" />
- <constructor-arg index="0"
ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager" />
- <constructor-arg index="1"
ref="org.apache.jetspeed.security.mapping.SecurityEntityManager" />
- </bean>
+
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLdapAssociationStorageManager">
+ <meta key="j2:cat" value="ldapSecurity" />
+ <constructor-arg index="0"
ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager" />
+ <constructor-arg index="1"
ref="org.apache.jetspeed.security.mapping.SecurityEntityManager" />
+ </bean>
<!--
- OnStartupSecuritySynchronizationBean will load the guest user from
LDAP, in-case its not in portal database
- It would be required for loading default page.
+ OnStartupSecuritySynchronizationBean will load the guest user from LDAP,
in-case its not in portal database
+ It would be required for loading default page.
This bean is wrapped in a ContextRefreshableBeanInitializer to kickstart
it once the complete Spring context is initialized.
-->
<bean id="_ldapOnStartupSecuritySynchronizer"
class="org.apache.jetspeed.components.ContextRefreshableBeanInitializer">
@@ -104,7 +104,20 @@
<property name="changePasswordByUser" value="false"/>
</bean>
- <bean id="_LdapUserPasswordCredentialManagerImplInitializer"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+ <!-- required when LdapUserPasswordCredentialManagerImpl.persistCredentials
is set to true (see above) -->
+ <bean id="_LdapUserPasswordCredentialManagerImplInitializer1"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+ <meta key="j2:cat" value="ldapSecurity" />
+ <property name="targetObject"><ref
bean="org.apache.jetspeed.security.spi.impl.LdapUserPasswordCredentialManagerImpl"/></property>
+ <property name="targetMethod"><value>setUserManager</value></property>
+ <property name="arguments">
+ <list>
+ <ref bean="org.apache.jetspeed.security.UserManager"/>
+ </list>
+ </property>
+ </bean>
+
+ <!-- required when LdapUserPasswordCredentialManagerImpl should synchronize
users on authentication -->
+ <bean id="_LdapUserPasswordCredentialManagerImplInitializer2"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<meta key="j2:cat" value="ldapSecurity" />
<property name="targetObject"><ref
bean="org.apache.jetspeed.security.spi.impl.LdapUserPasswordCredentialManagerImpl"/></property>
<property
name="targetMethod"><value>setJetspeedSecuritySynchronizer</value></property>
@@ -387,4 +400,4 @@
<property name="testOnBorrow" value="true" />
</bean>
-</beans>
+</beans>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]