2011-05-04 6 views
1

일반 Java 클래스를 사용하여 REST 웹 서비스의 curl 명령에서 사용자 이름과 암호를 가져 오려고합니다. 내 자바 클래스가REST 웹 서비스의 curl 명령에서 매개 변수 가져 오기

@GET 공공 응답 검사 (문자열 이름, 문자열 암호를)입니다 { 인증합니다 ..... }

내가 저지 프레임 워크를하고, NetBean IDE를 사용합니다. POJO 자바 클래스로 웹 서비스를 만들었습니다. 웹 서비스 자바 클래스에서 사용자 이름과 비밀번호를 얻는 방법을 아는 사람이 있습니까? 내 curl 명령과 같은 것입니다 :

컬 -u 사용자 이름 : 암호 http://localhost:8080/project/resources

답변

2

이 질문 here의 코드에 구축되는 경우, 사용자 이름을 얻는 것은 주석 자원에 새로운 속성을 추가하는 문제이다 @Contextjavax.ws.rs.core.SecurityContext 인 경우 (securityContext라고 부름). 그런 다음 다음과 같이 사용자 이름에 액세스 할 수 있습니다

String username = securityContext.getUserPrincipal().getName(); 

암호하지만이 API를 통해 사용할 수 없습니다. 이 접근법은 사용자가 컨테이너에 의해 이미 인증 된 경우에만 작동합니다. 패스워드를 얻으려면, 속성은 javax.ws.rs.core.HttpHeaders이어야합니다 (httpHeaders라고 부르 자). 암호 :이 객체를 사용하여, 당신은 당신에게 사용자 이름 구성된 base64로 인코딩 된 문자열에 사용자 이름과 암호를주고, 당신이 HTTP basic authentication를 사용하여 기본 것 나열된 curl 명령을 사용하여

String authHeader = httpHeaders.getRequestHeader("Authorization").get(0); 

를 호출해야 할 것이다. 이 값들을 얻기 위해, 파싱,베이스 64 디코드, 그리고 다시 파싱해야 할 필요가 있습니다. 당신이 제공하는 컬 명령은 요청에 다음과 같은 헤더를 추가합니다 :

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= 

내가 전에 제공되는 코드에서, authHeader는 값

Basic dXNlcm5hbWU6cGFzc3dvc.mQ= 

과 같이 될 것이다 사용자 이름과 암호를 얻기있을 것입니다 선택의 base64로 디코딩 라이브러리 그 코드를 대체 base64decode에서

String[] pair = base64decode(authHeader.split(" ")[1]).split(":"); 

. 이 호출 후 사용자 이름은 pair[0]이고 비밀번호는 pair[1]입니다. 이 코드는 모두 프로덕션 코드에 필요한 null 처리 및 경계 검사 및 예외 처리가 부족합니다. 또한 기본 인증 만 지원합니다. 다른 인증 방법을 지원해야하는 경우 해당 메소드가 필요로하는 모든 디코딩 및 구문 분석을 처리해야합니다.

JAX-RS는 SecurityContext 접근 방식을 사용하고 요청을 인증하기 위해 컨테이너에 의존하기 때문에, HttpHeaders 접근 방식을 사용하여 모든주의 사항을 이해하십시오.

관련 문제