2014-10-02 36 views
1

我正在開發一個使用Servlet 3.x的Web應用程序,而我沒有使用web.xml,而是使用配置註釋。我想限制在Openshift中部署的應用程序的所有流量都是HTTPS。我發現這篇文章介紹瞭如何在Tomcat中實現它(Jboss EWS)。如何在應用程序沒有web.xml時強制重定向到HTTPS

https://help.openshift.com/hc/en-us/articles/202398810-How-to-redirect-traffic-to-HTTPS-

但是最後一步涉及我改變,我沒有web.xml中。當我試圖找到替代方案時,我可以找到關於Servlet安全性的文章。有人可以幫我翻譯下面的代碼片段嗎?

A sample security-constraint directive in repo/src/main/webapp/WEB-INF/web.xml looks like: 

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

回答

4

目前,它是不可能使用@ServletSecurity註釋映射<url-pattern>/*</url-pattern>。它僅適用於@WebServlet中定義的模式。

你可以這樣定義註釋:

@ServletSecurity(@HttpConstraint(transportGuarantee = 
TransportGuarantee.CONFIDENTIAL)) 
@WebServlet(」/SSLServlet」) 
public class SSLProtected extends HttpServlet { 
} 

但是這隻會讓訪問that servlet SSL要求(在/ SSLServlet模式),而不是整個應用程序。你可以爲所有的servlet定義這樣的註釋,但比使用web.xml更容易出錯。 這就是爲什麼仍然建議使用web.xml而不是註釋來定義安全約束。

只需將web.xml添加到應用程序中的WEB-INF文件夾中,並提供您所提供的片段,那麼您將會很好。任何你爲什麼不能使用web.xml的原因?

+0

我沒有使用web.xml只是爲了邁向更新的定義webapp配置的方式。如果無法通過配置實現強制重定向,我寧願將該片段添加到web.xml中。但是,web.xml與註釋配置有衝突嗎?你能給我一個如何讓他們兩個的例子嗎? – 2014-10-03 22:08:04

+0

@SuChikki Newer並不意味着總是更好;)。確實沒有衝突,'web.xml'優先並覆蓋註釋。如何使用它們 - 您可以通過@WebServlet,@ WebFilter等配置您的Web組件,但通過web.xml堅持安全配置(例如,登錄配置,安全約束)。在部署期間,來自兩個來源的信息被合併。 – Gas 2014-10-03 22:41:23

+0

我試過你的建議,它工作得很好。謝謝你的幫助 – 2014-10-13 03:32:17

相關問題