2013-08-27 344 views
0

我想使用JAX-RS(Jersey + Jackson,Jackson生成JSON)構建RESTful Web服務。Glassfish摘要身份驗證

我使用Glassfish 4.0作爲服務器和NetBeans作爲IDE。

Web服務工作正常,但目前我沒有任何身份驗證。

所以現在我正在考慮散列密碼的摘要認證,以便您永遠不需要以純文本傳輸密碼。另外我想使用https,以便數據被加密。

我明白這個理論。但我不知道如何在Glassfish的Netbeans中做到這一點。

我看到一些教程在glassfish的管理控制檯中做某些事情。但是在netbeans中沒有辦法做到這一點嗎?我無法在NetBeans中定義一個將在創建應用程序時創建的領域?

創建領域和東西后。我想我需要在我的所有資源(Web服務)中注入某種經過身份驗證的「用戶」對象。但我從來沒有這樣做過。我正在尋找一個很好的教程,其中介紹瞭如何設置摘要式身份驗證和注入式netbeans可以使用netbeans執行此操作,以便我可以很好地理解它。

回答

5

注意:我的回答並未涵蓋與使用Netbeans配置容器身份驗證相關的問題。

我知道你只需要實現服務器端(你不需要客戶端部分)。

在服務器上有兩個部分需要解決:認證和授權。

認證

如果你決定使用HTTP基本身份驗證,HTTP摘要式身份驗證或客戶端證書身份驗證,則需要讓Glassfish的執行認證。如果您想使用SSL進行傳輸,我寧願使用HTTP基本身份驗證。密碼以明文形式發送,但通信是加密的。優點是這個認證更容易爲客戶實現。要定義HTTP基本認證,您可以使用應用程序的web.xml並定義「安全約束」和「登錄配置」標籤。例如:

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/rest/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>customer</role-name> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>my-defaul-realm</realm-name> 
</login-config> 

這不是Glassfish特定的解決方案;它也可以在其他應用程序服務器上工作。容器將執行認證,這些信息將在您的JAX-RS應用程序javax.ws.rs.core.SecurityContext中訪問。

授權

您現在可以使用的SecurityContext提取用戶主體,檢查用戶角色等。此外,新澤西州提供的功能使用註釋@RolesAllowed(「...」)和@PermitAll定義對資源的訪問(註解來自javax.annotation.security包)。您需要將RolesAllowedDynamicFeature註冊到澤西島才能啓用這些註釋的處理。例如,您可以定義以下資源的方法:

@RolesAllowed("admin") 
@GET 
public String get() { 
    return "admin private resource"; 
} 

這將導致只與角色「admin」的用戶將能夠執行get()方法。

您可以查看更多詳情(安全篇)澤西文檔: https://jersey.java.net/documentation/latest/security.html