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

Spring支撑模板-401未经授权的错误

钦永贞
2023-03-14

我正在SpringBoot应用程序中使用SpringREST模板。

即使我正在传递凭据,我也总是收到未经授权的错误。

我可以通过ChromeREST Web Service Client访问此服务。

在SpringBoot中是否有访问REST模板的简化方法。

下面是到目前为止完成的导致401错误的代码片段

 private DetailsBean invokeDetailsRestService(UserParam userParam){
    ResponseEntity<DetailsBean> responseEntity = null;
    String url = "https://dev.com/app/identifyuser/";
    RestClientConfig restClientConfig =new RestClientConfig("user123","pass123");
    responseEntity= restClientConfig.postForEntity(url, userParam, DetailsBean.class);
    log.debug("User Details : {} ", responseEntity.getBody());
    return responseEntity.getBody();
}

public ClientHttpRequestFactory getRequestFactory(String userName,String password){
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials( new AuthScope(null, -1), new UsernamePasswordCredentials(userName,password) );
    HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    return new HttpComponentsClientHttpRequestFactory(httpClient);
}

RestClientConfig类

  public RestClientConfig(String username, String password) {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(null, -1),
            new UsernamePasswordCredentials(username, password));
    HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}

错误:

WARN c7af55b5-1cac-4db6-a202-202416c27ba4 
 12612 --- [apr-8082-exec-8] o.a.http.impl.auth.HttpAuthenticator    
: NEGOTIATE authentication error: 
No valid credentials provided (Mechanism level: 
No valid credentials provided (Mechanism level: 
Failed to find any Kerberos tgt))

共有3个答案

锺离昂然
2023-03-14

我使用了Spring引导2.2.4。然后我下面的工作方式。

RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(username, password));
RequestDto requestDto = new RequestDto();
// set parameter 
ResponseDto response = restTemplate.postForObject(URL, requestDto, ResponseDto.class);

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(username, password);
RequestDto requestDto = new RequestDto();
// set parameter 
HttpEntity<RequestDto> request = new HttpEntity<>(requestDto, headers);
ResponseDto response = restTemplate.postForObject(URL, request, ResponseDto.class);
闾丘朗
2023-03-14

我在尝试调用webservice时遇到了类似的问题,这解决了我的问题:

restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("userName", "password"));
restTemplate.postForObject('','',''');

像这样通过证书,应该可以解决问题。

冀阳文
2023-03-14

使用以下代码修复了授权问题。。

凭据应通过以下代码传递给Spring REST模板:

   String userAndPass = "Test:Test123";

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

  • 我在Spring 4中使用以下内容通过RestTemplate检索JSON: 我使用相同的代码(具有不同的响应类)成功地从相同的站点获得JSON文档(具有不同的参数以获得不同的文档)。 当我执行上述代码时,我收到以下堆栈跟踪(部分): 有人能告诉我为什么这可能会收到异常吗?

  • Microsoft.Graph REST.API 我试图通过https://graph.microsoft.com/v1.0/me从graph.api获得有关我的信息 我也在这里检查这个其他主题,但我找不到像我一样的错误

  • 我是Spring boot和Spring Security的新手,出现以下错误: “错误401未经授权(c.e.l.security.jwt.AuthEntryPointJwt:未经授权的错误:访问此资源需要完全身份验证)” 我试过这个认证 我的问题是,当我成功登录时,我想请求获取用户列表。我发送的请求是一个安全GET请求,它是http://localhost:8084/loginsystem/a

  • 只要我的antMatcher上有.permitall(),这就可以很好地工作,但是当我试图保护它以便只有管理员才能进行该调用时(DB中的管理员角色是ROLE_ADMIN),它会返回401未经授权的访问,并且没有消息。我试过了 .hasRole(“admin”) .hasRole(“role_admin”) .hasAuthority(“admin”) .hasAuthority(“role_adm

  • 我对Spring Security(特别是OAuth2 SSO)还是个新手。 下面是我的pom.xml: 下面是启用了OAuth2SSO以及安全和rest控制器的主要类: 最后是视图:index.html: 我的主要挑战是,我可以用Facebook(在本例中是授权服务器)登录,但当我被重定向到localhost:8080/login时,我总是收到来自spring的401未授权错误,而不是像view