2012-03-15 81 views
0

我正在設計使用JSP的安全登錄。我打算使用表單授權來訪問Websphere上的應用程序。基本思想是當域中的內部認證用戶訪問一個頁面時,它將如常。但是,如果外部用戶嘗試訪問它,它將引導他們登錄頁面,與Active Directory連接,並在正確的身份驗證後將其重定向到頁面。使用JSP和Websphere安全登錄

爲了使其工作,我試圖修改Web.xml以允許使用內置的「j_security_check」servlet進行表單身份驗證。登錄後,它會迎接用戶「你好,!」具有簡單功能<%request.getRemoteUser()%><%request.getUserPrincipal()。getName()%>

基礎上examples found here,我修改web.xml中的細節如下:

<welcome-file-list> 
    <welcome-file>/protected/index.jsp</welcome-file> 
</welcome-file-list> 

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/protected/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>admin</role-name> 
     <role-name>users</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
     <form-login-page>/login.jsp</form-login-page> 
     <form-error-page>/error.jsp</form-error-page> 
    </form-login-config> 
</login-config> 

<security-role> 
    <description>Administrator</description> 
    <role-name>admin</role-name> 
</security-role> 
<security-role> 
    <description>Users</description> 
    <role-name>users</role-name> 
</security-role> 

在我的login.jsp,我有一個簡單的表格,確實在日誌

​​

。在我的index.jsp下,它用簡單的請求迎接用戶。

<body> 
    Hello, <% request.getRemoteUser(); %> 
    Hello, <% request.getUserPrincipal().getName(); %> 
</body> 

我在這裏面臨三個問題。重要性按原樣排列。

1)錯誤403 重定向和登錄頁面起作用。當我嘗試訪問index.jsp時,我被重定向到login.jsp。當我輸入一個不正確的uid:pwd對時,我用error.jsp迎接。當我正確登錄時,我被重定向回index.jsp,但我遇到了錯誤403:網站要求您登錄。我確定我已經登錄,因爲我之前無法訪問內置的snoop頁面,但登錄後,我可以。我懷疑這是在我的web.xml

2)在禁止在web.xml所有保護和訪問index.jsp的獲取用戶的ID 甚至一些設置,我有一個「招呼你好,空!「而不是」你好,用戶!「。在index.jsp中顯示的代碼應該是正確的,因爲我從互聯網上的snoop示例代碼中複製了代碼。 request.getRemoteUser()在我的index.jsp上不起作用,但適用於snoop頁面。在執行請求之前,我一定不會打電話嗎?

3)安全性(還不重要) 我認爲這個j_security_check是在Spring Security下。我正在嘗試加密發送方和接收方以及傳輸通道。這是因爲對於身份驗證,我相信密碼不得以明文形式發送或存儲。我發現some information here,這導致我嘗試/嘗試保護此認證過程。

對於我面臨的前三個問題,我將不勝感激。感覺就像我已經接近完成這件事,但它如此接近,但到目前爲止......

回答

2

如果有人想知道,這個問題很容易通過配置來解決。

1)在Web.xml中分配Admin和User的角色,必須進入Websphere>。war>角色和用戶>並將管理員和用戶角色物理分配給Active Directory中指定的角色。這將使用戶能夠訪問該頁面。

2)同樣在SPNEGO配置下的Websphere配置中,必須附加到列表「|」使其能夠發出請求。此後,域中已通過身份驗證的用戶將立即訪問該項目,而外部用戶將被重定向到登錄頁面。 request.getPrincipalUser()現在可以工作。

3)有一個春季安全示例工作。唯一的問題是它在ApplicationContextSecurity.xml而不是Active Directory中訪問本地的Authentication-Provider。要保護頻道,請在<transport-guarantee>NONE</transport-guarantee>下,將NONE替換爲CONFIDENTIAL。