У меня есть военный проект с интерфейсом JAX-RS, развернутым на wildfly, и настроен домен безопасности, который загружает пароль пользователя и роль из db. В домене безопасности используется тип cache-type = default. Обновления аутентифицированных пользователей не распознаются доменом безопасности, поскольку старые данные кэшируются. Я проверил это с помощью jboss-cli.sh. Итак, как я могу удалить конкретного пользователя из кеша? Я хочу сделать это в развернутом приложении, а не через jboss-cli.sh.Wildfly flush cache of security-domain
ответ
Ваша проблема может быть связана с ошибкой в 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 (я не проверял).
Я не использую сеансы, поэтому эта ошибка не влияет на мою проблему. Я просто хочу очистить кеш моего домена безопасности, и это абсолютно то, что делает ваше решение :) Танки! Я получил новую проблему и, следовательно, открыл новую тему. – Helmosch
Любая идея о том, как очистить кеш от нескольких экземпляров Wildfly? Либо работа в автономном режиме, либо в режиме домена? – SamF
В 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
Подобное решение должно работать на автономном режиме.
Если вы удалите атрибут «cache-type = default» из домена безопасности, кеш не будет использоваться. См. Также здесь: https://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration
В какой версии WildFly вы используете? –
это wildfly 8.2.0.final – Helmosch