2012-04-23 6 views
0

기본 인증을 사용하는 com.sun.net.httpserver.HttpServer를 기반으로하는 Java 프로그램에서 작은 HTTP 서버를 구현했습니다. 이 모든 것은 정상적으로 작동하지만 실패한 인증 요청을 처리하려고합니다.Java HttpServer에서 실패한 인증을 처리하는 방법

기본적으로 사용자가 인증에 실패하면 (브라우저의 로그인 팝업에서 취소 버튼을 누르면) 빈 페이지가 클라이언트로 다시 전송됩니다. HttpHandler의 handle() 메소드가 호출되지 않습니다.

내 프로그램에서 이러한 인증 실패 시도를 어떻게 잡을 수 있습니까?

감사합니다.

답변

0

Authenticator 전에 필터가 호출되는지는 잘 모르겠다. (필터의 콘솔에 som 디버깅 정보를 출력하고 인증자가 "당신을 쫓아 내기"전에 콘솔에 기록되는지 확인할 수 있습니다.) 인증 전에 실행되는 필터를 작성하여 사용자를 오류 페이지로 리디렉션합니다.

1

오피스에서 보았습니다 ... 인증 기에서 다음을 수행하면됩니다. Authenticator.Retry Result를 입력하고 새 헤더 "Location : http://mysite/loginpage"또는 리디렉션 할 내용을 지정합니다. 상대 URL/loginpage가 아닌 http : //로 시작하는 절대 URL을 지정해야합니다.

EDIT : BasicAuthenticator의 하위 클래스를 사용하는 경우 authenticate 메소드도 재정의해야합니다. 원본 인증 코드가 무엇인지 확인하려면 원본 소스 코드 (http://xantorohara.blogspot.com/2008/07/sources-of-comsunnethttpserverhttpserve.html 참조)를보고 싶을 것입니다 ... 또는 authenticate() 메서드를 사용하여 super.authenticate()가 무엇을 반환하는지 실험 해 볼 수 있습니다. 실패한 경우 대신 Location : 헤더로 Retry를 보내십시오.

+0

감사합니다. – Matthias

+0

위대한! 그게 authenticate() override로 수정 되었습니까? –

+0

여전히 문제가 있습니다. 클라이언트에 새 Authenticator.Retry (301)를 보내면 login-failed-info-page로 올바르게 리디렉션됩니다. 그러나 로그인을 다시 시도하면 로그인 페이지가 다시로드되어 자동으로 login-failed-info-page로 리디렉션됩니다. 그것은 브라우저가 "잘못된"자격 증명이 처음에 올바른 것으로 생각합니다! – Matthias

관련 문제