5

我在wildfly上部署了一个带有JAX-RS接口的war项目,并且配置了一个安全域,它从db加载用户密码和角色。安全域使用 cache-type=default。安全域无法识别经过身份验证的用户的更新,因为旧数据已被缓存。我用 jboss-cli.sh 验证了这一点。那么如何从缓存中删除特定用户呢?我想在已部署的应用程序中执行此操作,而不是通过 jboss-cli.sh。

4

3 回答 3

7

您的问题可能与 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 中修复(我没有检查)。

于 2015-09-05T16:17:39.470 回答
1

在使用域模式的 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

类似的解决方案应该适用于独立模式。

于 2017-07-01T18:54:06.290 回答
1

如果您从安全域中删除属性 'cache-type=default',则不会使用缓存。另见此处:https ://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration

于 2017-09-11T13:43:49.683 回答