[jboss-user] [JBoss Seam] - Re: external authentication-any pointers for a beginner?

mwkohout do-not-reply at jboss.com
Fri Jul 27 16:12:11 EDT 2007


Thanks for your continuing suggestions and patience, Shane.

I reimplemented  by overriding getLoginContext() and it's still going boom.

here's my JAAS config factory method:

  | @Factory(value="org.jboss.seam.security.configuration", autoCreate=true, scope=APPLICATION)
  |    public javax.security.auth.login.Configuration getConfiguration()
  |    {
  |        log.error("in my getConfiguration()");
  |       return new javax.security.auth.login.Configuration()
  |       {
  |            
  |          private AppConfigurationEntry[] aces = { new AppConfigurationEntry( 
  |             X500LoginModule.class.getName(), 
  |             LoginModuleControlFlag.REQUIRED, 
  |             new HashMap<String,String>() 
  |          ) };
  |          
  |          @Override
  |          public AppConfigurationEntry[] getAppConfigurationEntry(String name)
  |          {
  |             List<AppConfigurationEntry> entries = new ArrayList<AppConfigurationEntry>();
  |             for( AppConfigurationEntry entry : aces)
  |             {
  |                 if( entry.getLoginModuleName().equals(name))
  |                     entries.add(entry);
  |                     
  |             }
  |             return entries.toArray(new AppConfigurationEntry[0]);
  |          }
  |          
  |          
  |          public String toString()
  |          {
  |             return "appConfigurationEntries="+Arrays.asList(aces);
  |          }
  |          
  |          
  |       };
  |    }
  | 

And my subclass of identity

  | @Name(value = "org.jboss.seam.security.identity")
  | @Scope(value = SESSION)
  | //@BypassInterceptors
  | @Startup
  | public class X500Identity extends Identity {
  | 
  |     private static final LogProvider log = Logging.getLogProvider(X500Identity.class);
  | 
  |     @In(value="org.jboss.seam.security.configuration")
  |     Configuration config;
  | 
  |     @In(value="org.jboss.seam.core.expressions")
  |     Expressions expressionFactory;
  | 
  |     public X500Identity()
  |     {
  |         setJaasConfigName(X500LoginModule.class.getName());
  |         setAuthenticateEveryRequest(true);
  |         log.error("in X500Identity constructor.  jaas config name = "+this.getJaasConfigName());
  |     }
  |     @Override
  |     protected LoginContext getLoginContext() throws LoginException {
  |         log.error("in my getLoginContext()");
  |         
  |         if (getJaasConfigName() == null) {
  |             throw new RuntimeException("In X500Identity.  JAAS config name not set.  Please set it up.");
  |         }
  |         if( config == null )
  |             throw new RuntimeException("In X500Identity.  \"org.jboss.seam.security.configuration\" component not injected.  Please set it up.");
  | 
  |             log.error( "new LoginContext(getJaasConfigName(), getSubject(), getDefaultCallbackHandler(), config)=+new LoginContext("+getJaasConfigName()+","+ getSubject()+","+ getDefaultCallbackHandler()+","+ config+")");
  |         return new LoginContext(getJaasConfigName(), getSubject(), getDefaultCallbackHandler(), config);
  |     }
  | 
  |     @Override
  |     public CallbackHandler getDefaultCallbackHandler() {
  |         log.error("in my getDefaultCallbackHandler()");
  |         return new CookieCallbackHandler();
  |     }
  | 
  | 
  | 
  |     @Override
  |     public void checkRestriction(String expr) {
  |         log.error("in my checkRestriction(String expr) expr=" + expr);
  |         if (!evaluateExpression(expr)) {
  |             if (!isLoggedIn()) {
  |                 this.login();
  |             } else {
  |                 Events.instance().raiseEvent("org.jboss.seam.notAuthorized");
  |                 throw new AuthorizationException(String.format("Authorization check failed for expression [%s]", expr));
  |             }
  |         }
  |     }
  | 
  |     @Override
  |     public boolean isLoggedIn(boolean attemptLogin) {
  |         log.error("in my isLoggedIn(boolean attemptLogin) attemptLogin = " + attemptLogin);
  |         boolean isLoggedIn = super.isLoggedIn(attemptLogin);
  |         log.error("exiting isLoggedIn(boolean attemptLogin).  isLoggedIn = " + isLoggedIn);
  |         return isLoggedIn;
  |     }
  | 
  |     @Override
  |     public Expressions.MethodExpression getAuthenticateMethod() {
  |         log.error("in my getAuthenticateMethod():"+expressionFactory.createMethodExpression("#{authBean.authenticate()}"));
  |         return expressionFactory.createMethodExpression("#{authBean.authenticate()}");
  |     }
  | 
  | 
  |     public static Identity instance() {
  |         if (!Contexts.isSessionContextActive()) {
  |             throw new IllegalStateException("No active session context");
  |         }
  | 
  |         Identity instance = (Identity) Component.getInstance(X500Identity.class, ScopeType.SESSION);
  | 
  |         if (instance == null) {
  |             throw new IllegalStateException("No Identity could be created");
  |         }
  | 
  |         return instance;
  |     }
  | }
  | 

For some reason, it doesn't appear to be hitting my authenticateMethod anymore....ideas?



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4068365#4068365

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4068365



More information about the jboss-user mailing list