我有一个使用JAX-RS接口部署在wildfly上的战争项目,并配置了安全领域,它从数据库加载用户密码和角色。 安全领域使用cache-type=default。 因为旧数据被缓存,所以不会识别已认证用户的更新。 我使用jboss-cli.sh验证了这一点。 那么如何从缓存中删除特定用户? 我想通过已部署的应用程序而不是通过jboss-cli.sh执行此操作。
我有一个使用JAX-RS接口部署在wildfly上的战争项目,并配置了安全领域,它从数据库加载用户密码和角色。 安全领域使用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中得到修复(我没有检查)。
./jboss-cli.sh --connect controller={domainhost}:9990 --user={username} --password={password}
/host={hostname}/server={instancename}/subsystem=security/security-domain={securityname}:flush-cache
If security domain is defined like this:
<security-domain name="ldap-test" cache-type="default">
/host=wf-server-1/server=instance-1/subsystem=security/security-domain=ldap-test:flush-cache
jboss-cli.sh -c --controller=127.0.0.1:9990 --user={username} --password={password} --command="/subsystem=security/security-domain=ldap-test:flush-cache"
。 - zperee