2015-09-03 5 views
2

У меня есть военный проект с интерфейсом JAX-RS, развернутым на wildfly, и настроен домен безопасности, который загружает пароль пользователя и роль из db. В домене безопасности используется тип cache-type = default. Обновления аутентифицированных пользователей не распознаются доменом безопасности, поскольку старые данные кэшируются. Я проверил это с помощью jboss-cli.sh. Итак, как я могу удалить конкретного пользователя из кеша? Я хочу сделать это в развернутом приложении, а не через jboss-cli.sh.Wildfly flush cache of security-domain

+0

В какой версии WildFly вы используете? –

+0

это wildfly 8.2.0.final – Helmosch

ответ

4

Ваша проблема может быть связана с ошибкой в ​​WildFly: https://issues.jboss.org/browse/WFLY-3221.

Существует обходной путь явно очистить кэш аутентификации:

@WebListener 
public class SessionInvalidationListener implements HttpSessionListener { 

    @Inject 
    private Principal principal; 

    @Resource(name = "java:jboss/jaas/mydomain/authenticationMgr") 
    private CacheableManager<?, Principal> authenticationManager; 

    @Override 
    public void sessionCreated(HttpSessionEvent se) { 
     // not used 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent se) { 
     authenticationManager.flushCache(principal); 
    } 
} 

Я проверил этот подход в несколько ином случае использования. Интересный бит - доступ к authenticationManager - его легко адаптировать к вашей ситуации.

Ошибка должна быть исправлена ​​в WildFly 9.x (я не проверял).

+0

Я не использую сеансы, поэтому эта ошибка не влияет на мою проблему. Я просто хочу очистить кеш моего домена безопасности, и это абсолютно то, что делает ваше решение :) Танки! Я получил новую проблему и, следовательно, открыл новую тему. – Helmosch

+0

Любая идея о том, как очистить кеш от нескольких экземпляров Wildfly? Либо работа в автономном режиме, либо в режиме домена? – SamF

0

В Wildfly 10 с использованием режима домена вы можете очистить кэш для доменов безопасности очень легко с помощью JBoss-Cli по следующему пути:

Первого подключения к контроллеру домена с помощью

./jboss-cli.sh --connect controller={domainhost}:9990 --user={username} --password={password} 

Затем выполните команду

/host={hostname}/server={instancename}/subsystem=security/security-domain={securityname}:flush-cache 

Если домен безопасности определяется следующим образом:

<security-domain name="ldap-test" cache-type="default"> 

команда будет выглядеть следующим образом:

/host=wf-server-1/server=instance-1/subsystem=security/security-domain=ldap-test:flush-cache 

Подобное решение должно работать на автономном режиме.

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

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