如何在GlassFish 2上保护网络服务?

我们在GlassFish 2服务器上部署了一些不透明的EJB(EJB3),它们通过@Webmethod注释将它们的一些方法公开为webservices。

现在我们想要保护这些Web服务方法,以便只有经过身份validation的客户端才能调用它。 实现这一目标的好方法是什么?

就像善良的牧师所说的那样。 以下示例使用文件域进行身份validation。

@Stateless @WebService(name = "MyAppServices") @RolesAllowed({"user"}) public class ItemEJB { ... } 

您还需要sun-ejb-jar.xml,例如

    user  user    ItemEJB   MyAppServices  BASIC file     

在glassfish文件域中创建一个组是微不足道的(管理控制台)。 但是,您可以创建自己的自定义领域和登录模块

您可以使用安全注释授权角色列表以访问方法或整个bean:

例如

 @Stateless @RolesAllowed({"user", "employee", "admin"}) public class ItemEJB { ... } 

有关更多信息,请参阅以下链接:

http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/

现在我们想要保护这些Web服务方法,以便只有经过身份validation的客户端才能调用它。

我认为这与ssl无关。 所以:
1)客户端登录提供用户名和密码
2)如果用户名和密码正确(存储在DB中),则用户被视为已登录,并且在回复中,Web服务生成唯一的会话令牌(以某种方式与用户名和密码相关),并在回复。
此令牌与时间戳信息以及用户名和密码一起存储。
3)每次客户端发送请求时,令牌将与其他参数一起发回。 如果令牌有效,则表示该请求来自经过身份validation的客户端。
4)应该期望所有请求都具有包含其余参数的会话令牌。
因此,未经validation的客户端将无法发送令牌。