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

捕获身份验证异常

陆飞鸿
2023-03-14

我使用以下代码发送XML请求:

RestClient client = RestClientBuilder.builder()
                        .gatewayUrl(URL) 
                        .build();
Mono<AuthorizeResponse> result = client.executeAndReceiveAuthorize(request);
                response = result.block();

 public RestClient(String gatewayUrl, String token, String username, String password, SslContext sslContext) {
        this.token = token;
        this.gatewayUrl = gatewayUrl;
        WebClient.Builder builder = WebClient.builder().baseUrl(gatewayUrl);
        if (sslContext != null) {
            HttpClient httpClient = HttpClient.create().secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));
            ClientHttpConnector httpConnector = new ReactorClientHttpConnector(httpClient);
            builder.clientConnector(httpConnector);
        }
        if (username != null && password != null) {
            builder.filter(basicAuthentication(username, password));
        }
        client = builder.build();
    }

    public Mono<AuthorizeResponse> executeAndReceiveAuthorize(AuthorizeRequest transaction) {
        Mono<AuthorizeRequest> transactionMono = Mono.just(transaction);
        return client.post().uri(checkTrailingSlash(gatewayUrl) + token)
                .header(HttpHeaders.USER_AGENT, "Mozilla/5.0")
                .accept(MediaType.APPLICATION_XML)
                .contentType(MediaType.APPLICATION_XML)
                .body(transactionMono, AuthorizeRequest.class)
                .retrieve()
                .bodyToMono(AuthorizeResponse.class);
    }

但有时我会犯这个错误:

org.springframework.web.reactive.function.client.WebClientResponseException$Unauthorized: 401 Unauthorized
 at java.base/java.lang.Thread.run(Thread.java:834)
2019-08-27 22:05:45,720 ERROR [stderr] (processingTransactionGenesisAuthorizeContainer-1)       Suppressed: java.lang.Exception: #block terminated with an error
 Caused by: java.lang.NullPointerException: null

当我得到错误401时,我如何捕捉和处理异常?如果可能的话,我希望处理response=result.block();行之后的异常。

共有1个答案

邹开畅
2023-03-14

首先,在反应代码中显式使用block不是一个好主意。这背后的原因是,它将代码变成阻塞,而这并不是反应流的工作方式。因此,请删除response=result.block();

现在,如果希望处理特定状态,则可以修改ExecuteAndReceiveAuthorize方法,以使用WebClientonStatus(谓词 var1,函数 >var2)

public Mono<AuthorizeResponse> executeAndReceiveAuthorize (AuthorizeRequest transaction){

    Mono<AuthorizeRequest> transactionMono = Mono.just(transaction);

    return client.post().uri(checkTrailingSlash(gatewayUrl) + token)
        .header(HttpHeaders.USER_AGENT, "Mozilla/5.0").accept(MediaType.APPLICATION_XML)
        .contentType(MediaType.APPLICATION_XML).body(transactionMono, AuthorizeRequest.class)
        .retrieve().onStatus(status -> status == HttpStatus.UNAUTHORIZED, clientResponse -> Mono
            .error(new SomeCustomAuthorizationException("Some failure exception")))
        .bodyToMono(AuthorizeResponse.class);
}
 类似资料:
  • 当我试图通过Java驱动程序进行身份验证时,我被超级卡住了o_0,捕捉异常时有一个问题。正如您可能看到的,即使类也不起作用 仍未捕获异常

  • 在用户使用JNDIRealm身份验证登录Tomcat期间,我在Catalina日志中收到以下错误: 2018年6月26日12:08:29.547严重[http-nio-8080-exec-7]组织。阿帕奇。卡特琳娜。领域JNDIRealm。执行身份验证javax时发生身份验证异常。命名。AuthenticationException:[LDAP:错误代码49-80090308:LDAPPER:DS

  • 我正在尝试使用paramiko对设备进行ssh操作,并在虚拟环境中使用以下代码运行一些命令 从getpass导入paramiko导入getpass 如果name==“main”: 当我尝试运行上面的代码时,我得到以下错误: 文件“param.py”,第14行,s.connect(hostname=主机名,username=用户名,password=密码)文件“/users/myuser/myvir

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我正在使用DataStax驱动程序连接到Cassandra节点。下面是连接器的代码。 验证器:PasswordAuthenticator 调用connect方法时,显示以下错误: 主机LocalHost/127.0.0.1:9042上的身份验证错误:主机LocalHost/127.0.0.1:9042需要身份验证,但在群集配置中找不到身份验证器 编辑:异常堆栈位于

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答