是否可以在运行时删除 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)
在我的 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)