通過下面的鏈接訪問請求的數據是安全的URL,我需要在登錄後,堅持「資源」的參數,因爲它是用來在成功登錄後,將用戶重定向。在登錄頁面
http://wwwtest.mycompany.com/mwa/ssologin?resource=/content/en/home.html
的web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured</web-resource-name>
<description></description>
<url-pattern>/home</url-pattern>
<url-pattern>/jsp/apps/*</url-pattern>
<url-pattern>/ssologin</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description>protectedlinks</description>
<role-name>protected</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>mycompany.com</realm-name>
<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>
Protected portion of site</description>
<role-name>protected</role-name>
</security-role>
的login.jsp - 用戶似乎被重定向到的login.jsp和請求屬性(包括 「資源」 URL PARAM)不再存在
<form name="loginForm" method="post" action="login?resource=<c:out value='${param.resource}'/>">
Username:
<br/>
<input type="text" size="15" name="user">
<br/>
Password:
<br/>
<input type="password" size="15" name="password">
<br/>
<input type="Submit" value="Login">
當我嘗試通過TagLib或過濾器訪問請求時,看起來Web容器(Web Sphere)正在執行我的login.jsp重定向。由於重定向,$ {param.resource}不起作用。
最簡單的解決辦法是讓瀏覽器執行的,而不是重定向前進,但到目前爲止,我無法找到一個方法來強制執行的安全約束向前(或其他地方)。我想到了其他一些令人費解的會話流程,但我不喜歡它們。
有些可接受的唯一解決方案是包含一些JavaScript更新操作以包含URL參數,但這並不是一直工作,因爲一些瀏覽器保留原始URL並且一些瀏覽器更新爲重定向URL( wwwtest.mycompany.com/mwa/login.jsp)。
如何我不是強制執行請求被轉發乾脆而不是重定向的安全,還是解決這個問題拿到以不同的方式?
UPDATE
- 資源參數是動態的,由第三方
- 我JSTL/EL語法工作絕對沒設置,如果我刪除的url-pattern 「/ ssologin」
- 隱藏參數將無法工作,因爲「資源」參數是在請求不再
感謝, 肖恩
是資源動態?如果沒有,簡單地硬編碼 – cen
我應該更加明確,「資源」參數是動態的,並由一些第三方軟件提供。 –