j_spring_security_check导致401(Android)

时间:2014-10-28 15:46:12

标签: android spring login spring-security resttemplate

我正在尝试使用rest模板通过spring security登录我的API。我能够在我的网络项目中成功登录,但不能使用Android应用程序。我试图解决这个问题很长一段时间但无法弄清楚。

网络代码:

@Autowired
RestTemplate restTemplate;

MultiValueMap<String, String> loginMap = new LinkedMultiValueMap<String, String>();
loginMap.add("j_username", j_username);
loginMap.add("j_password", j_password);

HttpEntity<?> userEntity = new HttpEntity<Object>(loginMap, new HttpHeaders());   

restTemplate.postForObject(PATH + "/j_spring_security_check", userEntity, String.class);

Android代码:

 RestTemplate restTemplate = new RestTemplate();

 MultiValueMap<String, String> loginMap = new LinkedMultiValueMap<String, String>();
 loginMap.add("j_username", this.mEmail);
 loginMap.add("j_password", this.mPassword);

 HttpEntity<?> userEntity = new HttpEntity<Object>(loginMap, new HttpHeaders());
 restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

 restTemplate.postForObject(PATH + "/j_spring_security_check", userEntity, String.class);

由于

1 个答案:

答案 0 :(得分:1)

我通过添加两个转换器解决了这个问题。

    RestTemplate restTemplate = new RestTemplate();

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    messageConverters.add(new FormHttpMessageConverter());
    messageConverters.add(new StringHttpMessageConverter());
    messageConverters.add(new MappingJacksonHttpMessageConverter());
    restTemplate.setMessageConverters(messageConverters);

    MultiValueMap<String, String> loginMap = new LinkedMultiValueMap<String, String>();
    loginMap.add("j_username", this.mEmail);
    loginMap.add("j_password", this.mPassword);

    HttpEntity<?> userEntity = new HttpEntity<Object>(loginMap, new HttpHeaders());

    restTemplate.postForObject(PATH + "/j_spring_security_check", userEntity, String.class);