Lao*_*oon 0 glassfish jax-rs java-ee-6 java-ee-7 jersey-2.0
我想使用JAX-RS构建RESTful Web服务(Jersey + Jackson,Jackson用于生成JSON).
我使用Glassfish 4.0作为服务器,netbeans作为IDE.
Web服务工作正常,但目前我没有任何身份验证.
所以现在我正在考虑散列密码的摘要验证,这样你就不需要以纯文本形式传输密码了.另外我想使用https,以便加密数据.
我理解了理论.但我不知道我怎么能用Glassfish在Netbeans中做到这一点.
我看到一些教程在glassfish的管理控制台中做了一些事情.但是,有没有办法在netbeans中做到这一点?我不能在部署应用程序时创建的netbeans中定义一个领域吗?
创建领域和东西之后.我想我需要在我的所有资源(WebServices)中注入某种经过身份验证的"用户"-Object.但我以前从未这样做过.我正在寻找一个很好的教程,它描述了我如何设置摘要认证,注入网络netbeans可以用netbeans做到这一点,这样我就能很好地理解它.
小智 5
注意:我的答案不包括与使用Netbeans配置容器身份验证相关的问题部分.
我知道你只需要实现服务器端(你不需要客户端部分).
在服务器上,您需要解决两个部分:身份验证和授权.
认证
如果您决定使用HTTP基本身份验证,HTTP摘要身份验证或客户端证书身份验证,则需要让Glassfish执行身份验证.如果您想使用SSL进行传输,我宁愿使用HTTP基本身份验证.密码以明文形式发送,但通信已加密.优点是这种认证更容易为客户实现.要定义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>
Run Code Online (Sandbox Code Playgroud)
这不是Glassfish特定的解决方案; 它也适用于其他应用程序服务器.Container将执行身份验证,并且可以在javax.ws.rs.core.SecurityContext中的JAX-RS应用程序中访问此信息.
授权
您现在可以使用SecurityContext来提取用户Principal,检查用户角色等.此外,Jersey提供了使用注释@RolesAllowed("...")和@PermitAll来定义对Resources的访问的功能(注释来自javax.annotation.安全包).您需要将RolesAllowedDynamicFeature注册到Jersey中才能启用这些注释的处理.例如,您可以定义以下资源方法:
@RolesAllowed("admin")
@GET
public String get() {
return "admin private resource";
}
Run Code Online (Sandbox Code Playgroud)
这将导致只有角色为"admin"的用户才能执行get()方法.
您可以查看Jersey文档以获取更多详细信息(安全性章节):https: //jersey.java.net/documentation/latest/security.html