2012-10-17 53 views
0

我有一個運行在Tomcat 7上的web應用程序,並且我已經成功地通過使用https和相應的端口直接使用SSL和基於表單的身份驗證來工作。不過,我想要求登錄頁面使用SSL,並且如果我導航到我的Web應用程序的根目錄,似乎無法使其工作。例如。如果我去http://localhost:8080/ProjectManagementSystem/login.html它重定向到SSL,但不是如果我去http://localhost:8080/ProjectManagementSystem後者會重定向到登錄頁面,但不會更改爲SSL。使用webapp的web.xml重定向到SSL登錄頁面

這是可能的,而無需將登錄頁面移動到其自己的目錄(如this question)?

從web.xml中的相關作品是:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>PMS</web-resource-name> 
     <url-pattern>/login.html</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

<login-config> 
     <auth-method>FORM</auth-method> 
     <realm-name>ProjectManagementSystem</realm-name> 
     <form-login-config> 
       <form-login-page>/login.html</form-login-page> 
       <form-error-page>/error.html</form-error-page> 
     </form-login-config> 
</login-config> 

我已經嘗試了多種不同的配置(如添加額外的URL的模式,如/),但不能得到任何東西,當我去重定向到網絡應用程序的根。我真的很感激知道這是不可能的,或者我只是做錯了什麼。謝謝。

ETA:我實際上繼續嘗試將login.html移動到login/login.html並將其更改爲<url-pattern>/login/*</url-pattern>,但它仍然不起作用。所以我認爲我一定在做錯事,但是我不能爲了我的生活而弄清楚什麼。

ETA2:我也嘗試過<url-pattern>/*</url-pattern><url-pattern>*</url-pattern><url-pattern>*.html</url-pattern>並沒有這些工作要麼...

ETA3:我試圖改變網絡資源的名稱爲好,如果它與另一部分發生衝突web.xml,但仍然不起作用。我沒有想法。

+0

你已經找到了問題但安全性約束使用兩個URL的方式來解決這個問題?我有同樣的問題。 –

+0

不,不幸的是我還沒有設法解決這個問題。它現在是在後面的燃燒器,但我認爲,如果我仍然無法找到一個web.xml的方式來做到這一點,我將不得不手動重定向(在servlet中可能?)。似乎應該有辦法做到這一點,但我還沒有找到任何東西。 – Maltiriel

回答

4

我得到這個在JBOSS 7.1.1工作如下:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>*</web-resource-name> 
     <url-pattern>/logon.jsp</url-pattern> 
     <url-pattern>/logonReconnect.jsp</url-pattern> 
     <url-pattern>/logoff.do</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
    </security-constraint> 

例如有3頁允許登錄,以及standalone.xml中的SSL配置,這會強制用於登錄頁面和會話的SSL,但不會對其他內容設置約束。這是爲了解決IE8和更早版本中的一種bizzre問題,如果我們對所有內容放置約束,則活動內容(熱點)被禁用。

+0

如果您導航到您的Web應用程序的根目錄,而不是直接進入其中一個登錄頁面,這仍然有效嗎?這就是我遇到問題的地方。如果我直接進入我的登錄頁面,它一切正常,但如果您轉到Web應用程序的根目錄或任何其他頁面,則Web應用程序將重定向到登錄頁面,並且重定向不會SSL。 – Maltiriel

0

我有同樣的問題:只有根頁面沒有重定向到https,所有其他頁面。我設法在像

<security-constraint> <web-resource-collection> <web-resource-name>PMS</web-resource-name> <url-pattern>*.xhtml</url-pattern> <url-pattern>/</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>