0

我想使用 JAX-RS(Jersey + Jackson,Jackson 用于生产 JSON)构建 RESTful Web 服务。

我使用 Glassfish 4.0 作为服务器,使用 netbeans 作为 IDE。

网络服务工作正常,但目前我没有任何身份验证。

所以现在我正在考虑对密码进行哈希处理的摘要身份验证,这样您就不需要以纯文本形式传输密码。另外我想使用https,以便对数据进行加密。

我理解了这个理论。但我不知道如何在带有 Glassfish 的 Netbeans 中做到这一点。

我在 glassfish 的管理控制台中看到了一些教程。但是没有办法只在netbeans中做到这一点吗?我不能在部署应用程序时创建的 netbeans 中定义一个领域吗?

在创建领域和东西之后。我想我需要在我的所有资源(WebServices)中注入某种经过身份验证的“用户”对象。但我以前从未这样做过。我正在寻找一个很好的教程,它描述了我如何设置摘要身份验证,并且通过 netbeans 的注入可以用 netbeans 做到这一点,以便我能很好地理解它。

4

1 回答 1

5

注意:我的回答不包括与使用 Netbeans 配置容器身份验证相关的部分问题。

我知道您只需要实现服务器端(您不需要客户端部分)。

在服务器上,您需要解决两个部分:身份验证和授权。

验证

如果您决定使用 HTTP 基本身份验证、HTTP 摘要式身份验证或客户端证书身份验证,则需要让 Glassfish 执行身份验证。如果您想使用 SSL 进行传输,我宁愿使用 HTTP Basic 身份验证。密码以明文形式发送,但通信是加密的。优点是这种身份验证更容易为客户端实现。要定义 HTTP 基本身份验证,您可以使用应用程序的 web.xml 并定义“security-constraint”和“login-config”标签。例如:

<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 特定的解决方案;它也可以在其他应用服务器上工作。容器将执行身份验证,并且可以在javax.ws.rs.core.SecurityContext中的 JAX-RS 应用程序中访问此信息。

授权

您现在可以使用 SecurityContext 来提取用户主体、检查用户角色等。此外,Jersey 提供了使用注释@RolesAllowed("...")和 @PermitAll 来定义对资源的访问的功能(注释来自 javax.annotation。安全包)。您需要将RolesAllowedDynamicFeature注册到 Jersey 以启用对这些注释的处理。例如,您可以定义以下资源方法:

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

这将导致只有具有“admin”角色的用户才能执行 get() 方法。

您可以查看 Jersey 文档以获取更多详细信息(安全章节): https ://jersey.java.net/documentation/latest/security.html

于 2013-08-27T12:26:44.860 回答