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

时间:2015-09-19 21:10:26

标签: java jboss wildfly wildfly-8 user-roles

在我的webapp中,在Wildfly中运行,定义了几个角色。为每个角色(例如,管理员,支持等)为用户提供了几个选项卡。用户/管理员还可以为自己或浏览器中的其他用户启用/禁用角色。但是,添加/删除角色时,还应添加/删除选项卡。只有当jboss缓存从cli手动刷新或者甚至更糟 - 重新启动时才会发生这种情况。是否可以在运行时删除角色或刷新服务器缓存(当用户单击按钮时)?角色身份验证是通过'request.isUserInRole()'完成的,但我需要的是像setUserInRole(“admin”)= false。

2 个答案:

答案 0 :(得分:0)

这就是我解决它的方法。

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);  
      }  
}

答案 1 :(得分:0)

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

/主机= MYHOST /服务器= MyServer的/子系统=安全/安全域=其他:齐平安缓存(主要= UserToFlush)