2014-11-06 128 views
0

我有使用ajp向tomcat發送apache轉發請求。我在tomcat中的應用程序通過tomcat-users用戶數據庫使用基本身份驗證。用戶在那裏列出,給予角色,並且一切都很好。使用AJP在Tomcat中模擬和/或啓用單點登錄

但是,我的用戶使用身份證插入他們的工作站,通過唯一的號碼標識他們。我不知道這個細節,但是apache和瀏覽器有一些模塊能夠自動識別用戶,並且基本認證她,並且在Apache環境中REMOTE_USER可用。

不幸的是,REMOTE_USER在tomcat中不可用(通過request.getRemoteUser()),所以當用戶訪問我的tomcat應用程序時會提示用戶登錄。我發現這個線程:

Forward REMOTE_USER to tomcat via AJP (e.g. for shibboleth)

它描述了可以禁用Tomcat的認證,這使得在Tomcat中可用的REMOTE_USER,但由於我們已經停用tomcat的認證,也不再分配給任何角色用戶。

要清楚,我已經添加了這個ID號到tomcat-用戶,但它並不能幫助:

<user username="billg" password="pass" roles="ceo"/> 
<!-- billg's id number --> 
<user username="[email protected]" roles="ceo"/> 

我知道這是一個很獨特的環境和要求,但沒有任何人有經驗做這樣的工作?

FWIW:這是apache 2.2+和tomcat 6(但如果有解決方案的tomcat 7+我也對此感興趣)。

謝謝!

回答

0

您想在您的server.xml的AJP <Connector>配置中設置tomcatAuthentication="false"

查看Tomcat's AJP Connector Configuration Guide僅供參考。

儘管我給出的參考文獻是針對Tomcat 8的,但同樣的技術也適用於Tomcat 7和Tomcat 6。但是你可以升級到Tomcat 8,因爲它是穩定的,而且Tomcat 6目前處於維護模式,並且沒有太多改進。

+0

感謝您的迴應。如果你按照我給你的鏈接,你會看到這是建議。我嘗試了這一點,它可以在遠程用戶可用的地方工作,但是角色對用戶不可用。我試圖解決這個問題。有任何想法嗎? – rjcarr 2014-11-06 14:18:10

+0

您必須自己提取角色; httpd無法提供它們。您可能希望編寫一個'過濾器'來抓取'REMOTE_USER'作爲一個可信任的身份,然後從其存儲的任何地方(例如RDBMS,LDAP等)加載角色幷包裝請求,以便request.isUserInRole'然後適用於您的應用程序。如果你需要使用容器管理的授權,你需要一個'Valve'而不是'Filter',因爲Tomcat的授權檢查在任何'Filter'被調用之前發生。 – 2014-11-06 14:49:09

+0

@Christopher_Schultz:謝謝你的迴應,這使得更有意義。你有沒有機會就如何做到這一點有任何指導,或者我應該參考tomcat文檔? – rjcarr 2014-11-10 18:21:38