[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security/authenticator ...
Shane Bryzak
Shane_Bryzak at symantec.com
Sat Dec 30 09:04:03 EST 2006
User: sbryzak2
Date: 06/12/30 09:04:03
Modified: src/main/org/jboss/seam/security/authenticator
ProviderAuthenticator.java
Log:
configuration support for provider flags
Revision Changes Path
1.12 +105 -56 jboss-seam/src/main/org/jboss/seam/security/authenticator/ProviderAuthenticator.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ProviderAuthenticator.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/authenticator/ProviderAuthenticator.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- ProviderAuthenticator.java 4 Dec 2006 01:21:52 -0000 1.11
+++ ProviderAuthenticator.java 30 Dec 2006 14:04:03 -0000 1.12
@@ -10,8 +10,8 @@
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.security.Identity;
import org.jboss.seam.security.AuthenticationException;
+import org.jboss.seam.security.Identity;
import org.jboss.seam.security.provider.AuthenticationProvider;
import org.jboss.seam.util.Reflections;
@@ -22,10 +22,33 @@
*/
@Name("org.jboss.seam.security.authenticator")
@Scope(APPLICATION)
- at Install(value=false, precedence=BUILT_IN)
+ at Install(value = false, precedence = BUILT_IN)
public class ProviderAuthenticator extends Authenticator
{
- private List<Object> providers = new ArrayList<Object> ();
+ /**
+ * These constants are semantically equivalent to the JAAS login module flags
+ * documented in javax.security.auth.login.Configuration
+ */
+ public enum Flag
+ {
+ required, requisite, sufficient, optional
+ };
+
+ private String flags;
+
+ private class ProviderEntry
+ {
+ public Object provider;
+ public Flag flag;
+
+ public ProviderEntry(Object provider, Flag flag)
+ {
+ this.provider = provider;
+ this.flag = flag;
+ }
+ }
+
+ private List<ProviderEntry> providers = new ArrayList<ProviderEntry>();
/**
*
@@ -37,14 +60,16 @@
public Identity doAuthentication(Identity authentication)
throws AuthenticationException
{
- for (Object p : providers)
+ for (ProviderEntry entry : providers)
{
AuthenticationProvider provider = null;
- if (p instanceof AuthenticationProvider)
- provider = (AuthenticationProvider) p;
- else if (p instanceof Component)
- provider = (AuthenticationProvider) ( (Component) p).newInstance();
+ /** todo implement flag logic */
+
+ if (entry.provider instanceof AuthenticationProvider)
+ provider = (AuthenticationProvider) entry.provider;
+ else if (entry.provider instanceof Component)
+ provider = (AuthenticationProvider) ((Component) entry.provider).newInstance();
Identity result = provider.authenticate(authentication);
if (result != null)
@@ -54,31 +79,55 @@
throw new AuthenticationException("Provider not found");
}
+ public void setFlags(String flags)
+ {
+ this.flags = flags;
+
+ if (!providers.isEmpty())
+ checkFlags();
+ }
+
+ private void checkFlags()
+ {
+ if (flags != null)
+ {
+ String[] parts = flags.split("[,]");
+
+ for (int i = 0; i < Math.min(parts.length, providers.size()); i++)
+ {
+ providers.get(i).flag = Flag.valueOf(parts[i]);
+ }
+ }
+ }
+
public void setProviders(Object values)
{
if (values instanceof AuthenticationProvider)
{
- providers.add(values);
+ providers.add(new ProviderEntry(values, Flag.required));
}
else
{
for (Object provider : (List) values)
{
if (provider instanceof Component)
- providers.add(provider);
+ providers.add(new ProviderEntry(provider, Flag.required));
else
{
try
{
- provider = Reflections.classForName(provider.toString()).newInstance();
- providers.add(provider);
+ provider = Reflections.classForName(provider.toString())
+ .newInstance();
+ providers.add(new ProviderEntry(provider, Flag.required));
}
catch (Exception ex)
{
-// log.error("Error creating provider", ex);
+ // log.error("Error creating provider", ex);
}
}
}
}
+
+ checkFlags();
}
}
More information about the jboss-cvs-commits
mailing list