【问题标题】:Android RestTemplate 403 Expected CSRF token not foundAndroid RestTemplate 403 未找到预期的 CSRF 令牌
【发布时间】:2015-02-09 15:40:39
【问题描述】:

我使用 spring android 将我的 android 应用程序连接到由 Spring MVC 和 Spring security 制作的 Web 服务。

这是连接到网络服务的代码 sn-p:

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
String token  = getToken(context);
HttpHeaders httpHeader = new HttpHeaders();
httpHeader.add(RestTemplateHelper.CSRF_TOKEN_HEADER, token);
httpHeader.setContentType(MediaType.APPLICATION_JSON);
HttpEntity requestEntity = new HttpEntity(message,httpHeader);
responseEntity = rest.exchange(params[0],HttpMethod.POST, requestEntity,
GetBalanceResponse.class);

RestTemplateHelper.CSRF_TOKEN_HEADER 是 X-CSRF-TOKEN。此代码 sn-p 总是给我错误 403 并显示消息“未找到预期的 CSRF 令牌。您的会话是否已过期?”但如果我从 Firefox RestClient 插件中也尝试使用标头 X-CSRF-TOKEN,它工作得很好。

有人说 REST 客户端不使用 CSRF 也可以,但就我而言,我真的需要让这个工作。

请帮帮我,谢谢。

【问题讨论】:

    标签: android spring csrf http-status-code-403 resttemplate


    【解决方案1】:

    我找到了我的问题的解决方案。 事实证明,从我的 android 应用程序发送的任何请求都应该具有 Cookie 标头,并将 JSESSIONID 作为其值。例如,“Cookie:JSESSIONID=2C01F881A33..”。 我的 android 应用程序请求在会话中的 Spring 安全保存令牌,因此我的 android 应用程序请求必须具有分配的 Cookie 标头 JSESSIONID 由服务器先前提供。

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2017-05-02
      • 2015-03-24
      • 2016-05-24
      • 2019-12-17
      • 2016-03-21
      • 1970-01-01
      • 2016-03-13
      • 2015-11-22
      相关资源
      最近更新 更多