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

Syl*_*lar 1 java security web-services glassfish ejb-3.0

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

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

小智 5

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

@Stateless
@WebService(name = "MyAppServices")
@RolesAllowed({"user"})
public class ItemEJB {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

<sun-ejb-jar>
<security-role-mapping>
            <!-- as defined in @RolesAllowed -->
    <role-name>user</role-name>
            <!-- glassfish group created in file realm -->
    <group-name>user</group-name>
</security-role-mapping>
<enterprise-beans>
    <ejb>
        <ejb-name>ItemEJB</ejb-name>
        <webservice-endpoint>
            <!-- equivalent to name attribute of @WebService -->
            <port-component-name>MyAppServices</port-component-name>
            <login-config>
                <auth-method>BASIC</auth-method>
                <realm>file</realm>
            </login-config>
        </webservice-endpoint>
    </ejb>
</enterprise-beans>
Run Code Online (Sandbox Code Playgroud)

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