package org.jboss.seam.security; import static org.jboss.seam.ScopeType.APPLICATION; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.util.HashMap; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Factory; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.security.jaas.SeamLoginModule; /** * Factory for the JAAS Configuration used by Seam Security. * * @author Shane Bryzak * */ @Name("org.jboss.seam.security.configurationFactory") @BypassInterceptors @Scope(ScopeType.STATELESS) @Install(precedence = BUILT_IN) public class Configuration { static final String DEFAULT_JAAS_CONFIG_NAME = "default"; protected javax.security.auth.login.Configuration createConfiguration() { return new javax.security.auth.login.Configuration() { private AppConfigurationEntry[] aces = { createAppConfigurationEntry() }; @Override public AppConfigurationEntry[] getAppConfigurationEntry(String name) { return DEFAULT_JAAS_CONFIG_NAME.equals(name) ? aces : null; } @Override public void refresh() {} }; } protected AppConfigurationEntry createAppConfigurationEntry() { return new AppConfigurationEntry( SeamLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap<String,String>() ); } @Factory(value="org.jboss.seam.security.configuration", autoCreate=true, scope=APPLICATION) public javax.security.auth.login.Configuration getConfiguration() { return createConfiguration(); } public static javax.security.auth.login.Configuration instance() { if ( !Contexts.isApplicationContextActive() ) { throw new IllegalStateException("No active application scope"); } return (javax.security.auth.login.Configuration) Component.getInstance("org.jboss.seam.security.configuration"); } }