当前位置: 首页 > 知识库问答 >
问题:

401试图使用来自Java EE应用程序的SOAP WS时未经授权

班安平
2023-03-14
CMAdapterService cmAdapterService = new CMAdapterService(); CMAdapter port =
      cmAdapterService.getCMAdapterPort();

      // Use the BindingProvider's context to set the endpoint BindingProvider bp =
      (BindingProvider)port;



      Optional credentials
      bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "myUser");
      bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "myPass");

      calling the webservice method CmReturn cmReturn =
      port.getPersonalData("12345"); System.out.println(cmReturn);

      byte[] imageData = port.getPersonalData("123") .getPersonalData()
      .getData();
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

    factory.setServiceClass(CMAdapter.class);
    factory.setAddress("http://myHost:8080/bla/CMAdapter");

    CMAdapter cmAdapter = (CMAdapter) factory.create();

    Client client = ClientProxy.getClient(cmAdapter);
    HTTPConduit http = (HTTPConduit) client.getConduit();

    http.getAuthorization().setUserName("myUser");
    http.getAuthorization().setPassword("myPass");

    byte[] imageData = cmAdapter.getPersonalData("12345").getPersonalData().getData();
<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-policy</artifactId>
        <version>3.3.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-tools-common -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-tools-common</artifactId>
        <version>3.3.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.3.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.3.1</version>
        <scope>provided</scope>
    </dependency>

我还编辑了webapp/WEB-INF/jboss-deployment-structure.xml,如下所示:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
        </exclude-subsystems>
        <dependencies>
            <module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />
            <module name="org.apache.cxf.impl">
                <imports>
                    <include path="META-INF"/>
                    <include path="META-INF/cxf"/>
                </imports>
            </module>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

但是,当我试图从我的企业Java应用程序调用web服务时,我会得到org.apache.cxf.transport.HTTP.HttpException:HTTP响应“401:unauthorized”,当我与HTTP://myhost:8080/bla/cmadapter通信时

共有1个答案

凤昊东
2023-03-14

我通过以下SO线程解决了这个问题

我需要添加以下代码:

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();

//This is the magic line. Setting this to false solved the problem
httpClientPolicy.setAllowChunking(false);

http.setClient(httpClientPolicy);

不确定它为什么起作用。似乎wildfly正在分块请求,对于某些reasone,用户名和密码被部分发送。

 类似资料:
  • 我正试图连接到google Contacts api以访问保存在google中的联系人/联系人,但它抛出了一个TokenResponseException:401 Unauthorized。我对谷歌Oauth2有些陌生。0.我已按要求将服务帐户密钥文件下载到我的项目根目录。 代码如下: 但是,会引发以下异常: 通用域名格式。谷歌。应用程序编程接口。客户啊。oauth2。TokenResponseE

  • 当构建一个不使用HTTP基本身份验证(但是像api-key这样的其他东西)并且客户机提供无效凭据的REST API时,您应该返回什么HTTP状态代码?401未经授权还是403禁止? IANA HTTP状态代码注册表将RFC7235第3.1节列为“401未经授权”的责任人,其中指出: HTTP 401响应必须始终包含一个WWW-Authenticate标头,该标头指示客户端如何进行身份验证。HTTP

  • 2018-09-07T06:59:41.950470+00:00Heroku[router]:at=info方法=get path=“/”host=forgebcsample.herokuapp.com request_id=6ef8e0d2-d814-478a-bbe2-e624789aceeefwd=“202.148.226.254”dyno=web.1连接=1ms服务=2ms状态=304字节

  • 我使用jmetm运行加载测试我的脚本记录的移动应用程序。当我运行记录的脚本,然后我得到响应代码401响应消息在运行移动应用程序负载测试时出现未经授权的错误 线程名称:线程组1-1示例开始:2017-09-07 06:52:06 UTC加载时间:37连接时间:0延迟:37字节大小:468发送字节:969头字节大小:293正文字节大小:175示例计数:1错误计数:1数据类型(“文本”|“bin”|“”

  • 我将使用ADFS作为身份提供者(IDP)实现对java应用程序的单点登录。通过OneLogin找到了此解决方案SSO,并使用了其示例应用程序。除此之外,还有另一个解决方案Shibboleth。 我想知道与我的上下文匹配的最佳解决方案是什么。之间,这不是Spring应用程序。 谢谢

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 我正在使用Chris Kacerguis的Codeigniter中的restserver,并设置rest_auth会话。当我登录时,我访问view.php通过file_get_contents得到响应的页面,它返回401未经授权。当我在新选项卡中访问API的直接页面时,它会正确返回json。 景色。php以以下方式加载API内容: 答复如下: 遇到一个PHP错误 严重性:警告 消息:file_ge

  • 我想使用爪哇谷歌驱动器API。我尝试了这段代码: 但是我得到了这个错误: 我使用以下配置: 你能告诉我怎么解决这个问题吗?