2015-09-19 19 views
0

在我的webapp中,運行在Wildfly中,定義了幾個角色。用戶每個角色都有多個選項卡(例如管理員,支持等)。用戶/管理員還可以爲他自己或瀏覽器中的其他用戶啓用/禁用角色。但是當角色被添加/刪除時,標籤也應該被添加/刪除。只有當jboss緩存從cli手動刷新或者更糟時纔會發生 - 重新啓動。是否有可能在運行時刪除角色或刷新服務器緩存(當用戶單擊按鈕時)?角色認證是通過'request.isUserInRole()'來完成的,但我需要的是類似於setUserInRole(「admin」)= false的東西。是否有可能在運行時刪除jboss中的角色或刷新緩存?

+0

我估計沖洗緩存和從JBoss服務器刪除用戶角色是兩個獨立的事情,可以是兩個不同的問題,但因爲這兩個解決方案都可以工作,所以請耐心等待。 – giorgimode

回答

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

是您的服務器以獨立模式還是域模式運行?因爲我在域模式下出現以下錯誤:2017-07-03 15:14:39,397錯誤[ch.bls.lopas.server.resource.ConnectionTestResource](默認任務-8)清空緩存時出錯:WFLYJMX0019:未命名操作「刷新緩存」 – puzste

0

對於使用JBoss CLI那些我想通了這個命令上面做的等價物。在下面的命令中,我使用的是域配置,但類似的情況應該適用於單個服務器。

/主機= MYHOST /服務器= MyServer的/子系統=安全/安全域=其他:齊平安緩存(主要= UserToFlush)

相關問題