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
Подобное решение должно работать в автономном режиме.