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