Spring REST基本身份验证需要用户ID

时间:2014-06-23 13:24:46

标签: spring rest http-basic-authentication

我通过基本身份验证获得了一个简单的REST Applikation。 身份验证工作正常,我可以发布/获取我的数据。 但经过身份验证并到达Controller后,我需要用户名/密码 在我的控制器中使用它。 是否有可能从Heades或其他东西得到这个?或者我真的需要使用用户名/密码POST / GET我的数据并忽略身份验证? 我以为它可以重复使用。

向你提供帮助。

3 个答案:

答案 0 :(得分:0)

您可以在REST方法中使用@RequestHeader注释。

还有一个选择是使用可以自动装入控制器的HttpServletRequest,然后使用getHeader方法获取标头数据(eg

答案 1 :(得分:0)

好的,这很简单,只需要在你的控制器中执行此操作:SecurityContextHolder.getContext().getAuthentication().getName(); 这样我就得到了我的用户名。密码是版本3.1的null,但我想我不需要它。 所有人都试图帮助我:)

答案 2 :(得分:0)

protected HttpHeaders getAuthentificatedRequestHeaders(String aUsername, String aPassword) {

    HttpAuthentication authHeader = new HttpBasicAuthentication(aUsername, aPassword);
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setAuthorization(authHeader);
    List<MediaType> media = new ArrayList<MediaType>();
    media.add(MediaType.APPLICATION_JSON);
    httpHeaders.setAccept(media);
    return httpHeaders;
}

public UserMdl getUserById(long id)     {

    final String url = getResourceUrl("user/{id}");
    HttpEntity<?> requestEntity = new HttpEntity<Object>(getAuthentificatedRequestHeaders(Config.REST_USERNAME, Config.REST_PASSWORD));
    RestTemplate restTemplate = getRestTemplatWithJsonConverter();
    ResponseEntity<UserMdl> response = restTemplate.exchange(url,HttpMethod.GET, requestEntity, UserMdl.class, id);
    UserMdl user = response.getBody();

    return user;
}

这是我在Android客户端中使用的一些代码。 “getAuthentificatedRequestHeades(..)”方法是抽象类的一部分,用于所有请求。另一种方法是使用代码而不是..