有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在GlassFish 2上保护Web服务?

我们在GlassFish 2服务器上部署了一些无状态EJB(EJB3),通过@Webmethod注释将它们的一些方法公开为Web服务

现在我们想要保护这些webservice方法,这样只有经过身份验证的客户端才能调用它。实现这一目标的好方法是什么


共 (2) 个答案

  1. # 1 楼答案

    Now we want to secure these webservice methods so that only authenticated clients can call it.

    我假设这与ssl无关。所以:
    1) 客户端登录时提供用户名和密码
    2) 如果用户名和密码正确(存储在DB中),则认为用户已登录,在回复中,web服务生成一个唯一的会话令牌(与用户名和密码有关),并在回复中发回
    此令牌与时间戳信息、用户名和密码一起存储
    3) 每次客户端发送请求时,令牌都会与其他参数一起发送回。如果令牌有效,则这意味着请求来自经过身份验证的客户端
    4) 所有请求都应该具有会话令牌和其他参数
    因此,未经身份验证的客户端将没有要发送的令牌

  2. # 2 楼答案

    就像那位好牧师说的。下面的示例使用文件域进行身份验证

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

    您还需要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>
    

    在glassfish的文件域中创建组非常简单(管理控制台)。不过,您可以创建自己的自定义域和登录模块