2011-03-16 176 views
11

我有一個由Jetty提供支持的網站。碼頭網絡服務器安全

我想使網站密碼受保護(或類似)。

有沒有一種方法可以通過單獨配置來完成此操作(不需要觸摸代碼)。

所有幫助非常感謝。

+2

這一切都在文檔中(http://wiki.eclipse.org/Jetty)。不幸的是,這些文檔的組織很糟糕。 – skaffman 2011-03-16 10:21:37

回答

21

一種方法是爲您的應用程序設置基本身份驗證。你只應該這樣做,如果你使用ssl,但是沒有ssl的登錄無論如何都不安全,所以我想你已經有了。

有多種方式碼頭要做到這一點,而這僅是其中之一。

首先,你必須確定你定義的所有用戶,密碼,角色等在碼頭的默認設置已經定義了一個名爲「測試服」的境界境界。領域在文件/etc/jetty-testrealm.xml中定義。你可以使用這個領域或創建一個新領域。如果你定義了一個新的,你可以在同一個文件或單獨的文件中定義它。如果您創建一個單獨的文件,請記得在start.ini中包含該文件。

的/etc/jetty-testrealm.xml具有/etc/realm.properties的參考。這是您創建用戶的地方。如果您只想使用測試領域,請記住刪除已在realm.properties中定義的默認用戶。

還有其他種類的領域實現,即使用用戶數據的數據庫。

接下來,打開/etc/webdefault.xml文件,並在底部添加這樣的事情:

<security-constraint> 
    <web-resource-collection> 
    <url-pattern>/*</url-pattern>  <!--The url that should be protected --> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>admin</role-name>  <!--The required roles for accessing the url --> 
    <role-name>user</role-name> 
    <role-name>moderator</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>BASIC</auth-method>  <!-- Use http basic authentication --> 
    <realm-name>Test Realm</realm-name> <!-- Users are defined in this realm --> 
</login-config> 
+0

您還應該通過您的應用程序包含defaultDescriptor。上下文文件:/etc/webdefault.xml maximdim 2012-01-21 23:58:14

0

我發現,碼頭分佈提供了非常有用的例子。 要使用來自文本文件的用戶帳戶使用基本身份驗證,請查看您的{jetty.home}/demo-base/etc目錄。將這兩個文件複製到您的{} jetty.base/etc文件夾:realm.properties,測試realm.xml

碼頭,除非你告訴它不能正確加載這些文件。這可以通過添加下面的文字到start.ini或任何* .ini文件在您{} jetty.base夾/start.d來完成:

# Create and configure the test realm 
etc/test-realm.xml 
jetty.demo.realm=etc/realm.properties 

最後,創建一個web.xml文件(如果還沒有完成),並在前面的答案中插入@ sstendal/@ Torsten提供的示例。它使用與jetty發行版的demo-base示例中相同的實名,因此它應該可以工作。 重新啓動jetty並嘗試訪問您的任何Web資源。您的瀏覽器或客戶端應詢問您的憑據。例如,用戶用戶/密碼。