2016-03-31 5 views
0

Ich habe ein benutzerdefiniertes Login-Modul für WildFly 10 geschrieben, die funktioniert. Aber die validatePassword-Methode wird für jede HTTP-Anforderung aufgerufen, auch nach einer erfolgreichen Anmeldung. Wie verhindere ich diese zusätzlichen Anmeldevalidierungen?WildFly-Login-Modul für jede HTTP-Anfrage aufgerufen

package my.company.security; 

import java.security.acl.Group; 
import java.util.List; 

import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.security.auth.login.LoginException; 

import org.jboss.security.SimpleGroup; 
import org.jboss.security.SimplePrincipal; 
import org.jboss.security.auth.spi.UsernamePasswordLoginModule; 

import my.company.myapp.boundary.UserManager; 

public class MyLoginModule extends UsernamePasswordLoginModule { 

    private static final String ROLES_GROUP_NAME = "Roles"; 

    @Override 
    protected String getUsersPassword() throws LoginException { 
     return ""; 
    } 

    @Override 
    protected boolean validatePassword(final String inputPassword, final String expectedPassword) { 
     boolean login = false; 
     try { 
      UserManager userManager = getUserManager(); 
      System.out.println("call"); 
      login = userManager.verifyLogin(getUsername(), inputPassword); 
     } catch (LoginException e) { 
      setValidateError(e); 
     } 

     return login; 
    } 

    @Override 
    protected Group[] getRoleSets() throws LoginException { 
     UserManager userManager = getUserManager(); 
     try { 
      List<String> roles = userManager.getUserRoleNames(getUsername()); 
      SimpleGroup group = new SimpleGroup(ROLES_GROUP_NAME); 

      for (String role : roles) { 
       group.addMember(new SimplePrincipal(role)); 
      } 
      return new Group[] { group }; 
     } catch (RuntimeException e) { 
      throw new LoginException(e.getMessage()); 
     } 
    } 

    private UserManager getUserManager() throws LoginException { 
     UserManager userManager; 
     try { 
      userManager = (UserManager) new InitialContext().lookup("java:global/myapp/UserManager"); 
     } catch (NamingException e) { 
      throw new LoginException(e.getMessage()); 
     } 
     return userManager; 
    } 

} 

Antwort

1

Für JBoss/WildFly gibt es zwei Optionen zum Zwischenspeichern in den Standardmodulen und infinispan. Wenn kein Cache angegeben ist, wird kein Caching durchgeführt. Zum Beispiel in der Standalone Standalone.xml Datei ist die andere Sicherheitsdomäne wie folgt definiert:

<security-domain name="other" cache-type="default"> 
+0

Vielen Dank! Ich hatte vergessen den Cachetyp zu definieren. – user208370

Verwandte Themen