2015-05-20 44 views
0

對於我的需求,我需要在Apache Tomcat服務器中有活動會話的所有活動用戶名單& Glassfish服務器。如何在Apache Tomcat服務器和GlassFish服務器中列出所有活動用戶名與活動會話

+0

您是否需要在JVM/Tomcat或外部執行此操作?您是否在羣集環境中,需要來自所有服務器的用戶名,還是隻需要一個用戶名? –

+0

有一個tomcat服務器和一個glassfish服務器。在tomcat服務器中,只有一個域和單個應用程序正在運行,而在glassfish服務器中共有6個域,每個域中有不同的應用程序正在運行。我必須從每個域收集活動用戶名。 –

回答

1

我不確定GlassFish,但是您可以編寫Tomcat來執行此操作,特別是在用戶會話中包含用戶名的對象時。在我的會話中,我有一個「用戶」對象,可以用於此。

這裏的食譜:

  1. 安裝Tomcat的manager Web應用程序並將其配置爲適當的認證
  2. 使用腳本如下所示:
for sessionid in `wget -qO - 'http://username:[email protected]:port/manager/jmxproxy?invoke=Catalina:type=Manager,context=/contextName,host=localhost&op=listSessionIds' \ 
    | sed -e "s/ /\n/g" -e 's/.*returned://'` 
do 
    response=`wget -qO - "http://username:[email protected]:port/manager/jmxproxy?invoke=Catalina:type=Manager,context=/contextName,host=localhost&op=getSessionAttribute&ps=$sessionid,user" 2>/dev/null` 

    #echo "$response" 

    if [ `expr "$response" : "^OK"` ] ; then 
     user=`expr "$response" : ".*\(User.*\)"` 
     if [ "$user" ] ; then 
     echo "$sessionid: $user" 
     else if [ "$VERBOSE" ] ; then 
     echo "$sessionid: [ no authenticated user ]" 
     fi fi 
    else 
     echo "[error]: $response" 
    fi 
done 

嗯......回 - 行情在那裏看起來不太好。讓我來看看如何讓代碼片斷可讀,然後我會更新這個答案。兩個wget命令都應該有圍繞它們的備份,第一個應該在returned://'字符串後面有close-backtick。

相關問題