安全域的 Wildfly 刷新缓存
Wildfly flush cache of security-domain
我有一个 war 项目,在 wildfly 上部署了 JAX-RS 接口,并且配置了一个安全域,它从数据库加载用户密码和角色。安全域使用 cache-type=default。安全域无法识别经过身份验证的用户的更新,因为旧数据已缓存。我用 jboss-cli.sh 验证了这一点。那么如何从缓存中删除特定用户呢?我想在部署的应用程序中执行此操作,而不是通过 jboss-cli.sh.
您的问题可能与 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(我没有检查)。
在使用域模式的 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
我有一个 war 项目,在 wildfly 上部署了 JAX-RS 接口,并且配置了一个安全域,它从数据库加载用户密码和角色。安全域使用 cache-type=default。安全域无法识别经过身份验证的用户的更新,因为旧数据已缓存。我用 jboss-cli.sh 验证了这一点。那么如何从缓存中删除特定用户呢?我想在部署的应用程序中执行此操作,而不是通过 jboss-cli.sh.
您的问题可能与 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(我没有检查)。
在使用域模式的 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