Wildfly очистить кеш безопасности домена

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

3 ответа

Решение

Ваша проблема может быть связана с ошибкой в ​​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 (я не проверял).

Если вы удалите атрибут "cache-type=default" из домена безопасности, кеш не будет использоваться. Смотрите также здесь: https://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration

В 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

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

Другие вопросы по тегам