是否可以在运行时删除 jboss 中的角色或刷新缓存?

Is it possible to remove role or flush cache in jboss at runtime?

在我的 webapp 中,运行 在 Wildfly 中,定义了几个角色。用户为他所拥有的每个角色(例如管理员、支持等)提供了几个选项卡。 User/admin 也可以 enable/disable 角色为自己或浏览器中的其他用户。但是当角色是 added/removed 时,tab 也应该是 added/removed。这只有在 jboss 缓存从 cli 手动刷新或者更糟的情况下 - 重新启动时才会发生。是否可以在运行时删除角色或刷新服务器缓存(当用户单击按钮时)?角色身份验证是通过 'request.isUserInRole()' 完成的,但我需要的是类似 setUserInRole("admin")=false 的东西。

我就是这样解决的。

public void flushAuthenticationCache(String userid) {

    final String domain = "mydomain";
    try {
        ObjectName jaasMgr = new ObjectName("jboss.as:subsystem=security,security-domain=" + domain);
        Object[] params = {userid};
        String[] signature = {"java.lang.String"};
        MBeanServer server = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
        server.invoke(jaasMgr, "flushCache", params, signature);

        } catch (Throwable e) {
        e.printStackTrace();
      }
}

请注意,上述方法仅为特定用户刷新缓存。 下面的方法为所有用户刷新缓存:

public static final void flushJaasCache(String securityDomain){  
      try {  
           javax.management.MBeanServerConnection mbeanServerConnection = java.lang.management.ManagementFactory  
                     .getPlatformMBeanServer();  
           javax.management.ObjectName mbeanName = new javax.management.ObjectName("jboss.as:subsystem=security,security-domain="+securityDomain);  
           mbeanServerConnection.invoke(mbeanName, "flushCache", null, null);  
      } catch (Exception e) {  
           throw new SecurityException(e);  
      }  
}

对于那些使用 JBoss CLI 的人,我想出了这个命令来执行与上述命令相同的操作。在下面的命令中,我使用的是域配置,但类似的应该适用于单个服务器。

/host=MyHost/server=MyServer/subsystem=security/security-domain=other:flush-cache(principal=UserToFlush)