2014-06-23 3 views
0

기본 인증을 가진 간단한 REST Applikation이 있습니다. 인증이 작동하며 POST/GET 데이터를 보낼 수 있습니다. 인증 후 컨트롤러에 접속하려면 내 컨트롤러에서 사용하려면 사용자 이름/비밀번호 이 필요합니다. 헤드 등에서 얻을 수 있습니까? 아니면 POST/GET 사용자 이름/비밀번호로 데이터를 가져와 인증을 무시해야합니까? 재사용 할 수 있다고 생각했습니다.스프링 REST 기본 인증 필요 사용자 ID

ThX 당신의 도움.

+0

HttpRequest 객체를 검사 해 보셨습니까? –

+0

아니, 나는 HttpRequest의 인스턴스를 어떻게 호출 할까? 내 컨트롤러는 주석에 의해 등록 된 간단한 클래스입니다. – user3756429

+0

오클라호마에서 HttpRequest를 얻었습니다. 데이터를 가져 오려고 노력할 것입니다. – user3756429

답변

0

REST 메서드에서 @RequestHeader 주석을 사용할 수 있습니다.

또 하나의 옵션은 HttpServletRequest의 컨트롤러에 autowire가 될 수있는, 정말 간단했다 후 getHeader 메소드를 사용하여 헤더 데이터를 얻을 수 (eg)

+0

thx 개체를 얻을 수 있지만 여전히 HttpAuthentication * 스크래치 밖으로 사용자 및 패스를 얻을 수 없습니다 * – user3756429

+0

클라이언트 쪽에서 REST 호출을 수행하는 코드를 붙여도 되겠습니까? –

0

OK, 당신의 컨트롤러에서이 작업을 수행 할 필요가 사용하는 것입니다 : SecurityContextHolder.getContext().getAuthentication().getName(); 이렇게하면 내 사용자 이름을 얻었습니다. 비밀 번호는 버전 3.1의 null couse지만 나는 그것을 필요 없을 것 같아요. 저를 도우려고 모든 THX :

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; 
} 

공공 UserMdl getUserById (긴 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; 
} 

이 내 안드로이드 클라이언트에서 사용하는 몇 가지 코드를 인도 표준시. "getAuthentificatedRequestHeades (..)"메소드는 추상 클래스의 일부이며 모든 요청에 ​​사용됩니다. 다른 방법은 코드를 사용하는 것입니다 ..