注意:我的回答不包括与使用 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