web-services - JAX-WS Web 服务的身份验证和授权的正确方法?

标签 web-services glassfish authorization jax-ws

我在实现 JAX-WS Web 服务的授权时遇到了问题。我正在开发一个可以通过 JAX-WS Web 服务连接到 Java EE 应用程序的 Swing 应用程序。用户可以使用Swing应用程序登录到服务器,并可以从服务器下载用户特定的数据。重要的是登录用户不能下载属于其他用户的数据。

我的问题是 jaxwsContext.getUserPrincipal().getName() 返回“ANONYMOUS”。我在这个门户网站上阅读了类似的问题,但不幸的是它没有帮助。

其实我有这个:

服务器端:

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebService
public class SampleWSEJB extends AbstractSampleEJB implements ISampleWSLocal, ISampleWSRemote {

    @Resource
    private WebServiceContext jaxwsContext;

    public String getUsername() {
        return username = jaxwsContext.getUserPrincipal().getName();
    }

    @Override
    @WebMethod
    public UserDataVO logInUser() {
        return SampleServerServices.getInstance().logInUser(getEm(), this.getUsername());
    }

...
...

}

客户端:

我使用 wsimport 工具生成的一些类(ImportedSampleWSEJB、UserDataVO 等...)

相关客户端代码:

private static ImportedSampleWSEJB importedEJB;

public UserDataVO logInUser(String username, String password) {
    Map<String, Object> requestContext = ((BindingProvider)ImportedSampleWSEJB.importedEJB).getRequestContext();
    requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
    return importedEJB.logInUser();
}

我使用"file"作为安全领域,并在 glassfish 3.1 中创建了一些测试用户。

有人知道如何解决吗?

最佳答案

您可以使用基本身份验证(http header ),也可以使用用户名 token (WS-Security 的一部分)。用户名 token 将进入 SOAP header 而不是 http header 。

关于web-services - JAX-WS Web 服务的身份验证和授权的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729858/

相关文章:

authorization - 基于属性与基于事件的访问控制

java - 是否可以在不首先生成客户端 stub /代理的情况下从 Java 客户端使用 EJB 3 Web 服务?

java - 简单的Java Web服务问题

c# - 使用 Visual Studio 2013 在 C# 中创建 asmx Web 服务

java - 连接池 "Leak"正在开发中。可能是由于 JUnit 测试设置所致?

jakarta-ee - 如何在 JUnit 测试中使用 HK2 注入(inject) CDI 事件?

java - 使用 Metro,向客户端添加 MTOMFeature 会导致 MIMEParsingException,为什么?

java - 如何在 ServerName 和 Url 中使用 DNS 设置 Glassfish 连接池

ruby-on-rails - 使用 token 对 API 进行身份验证

scala - 如何使用 Finagle to Telegram API 发出正确的 https 请求