2016-03-31 4 views
0

Я написал специальный модуль регистрации для WildFly 10, который работает. Но метод validatePassword вызывается для каждого HTTP-запроса даже после успешного входа в систему. Как предотвратить эти дополнительные проверки входа?Модуль входа в WildFly, вызываемый для каждого HTTP-запроса

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; 
    } 

} 

ответ

1

Для JBoss/WildFly существует два варианта кэширования в модулях входа по умолчанию и бесконечности. Если кеш не указан, кэширование не будет. Например, в файле standalone.xml по умолчанию другой домен безопасности определяется как:

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

Спасибо! Я забыл определить тип кеша. – user208370

 Смежные вопросы

  • Нет связанных вопросов^_^