2009-05-21 3 views
0

웹 서버에서 401 메시지를 받으면 Java를 사용하여 브라우저 인증 대화 상자를 오버라이드하는 방법이 있습니까? 이 대화 상자가 표시되는시기를 알고 싶습니다. 사용자에게 표시되는 대신 사용자의 자격 증명을 입력합니다. 응용 프로그램의브라우저 인증 대화 상자 넘김

개요 :

내가 웹 서버를 썼다, 그래서 기본적으로 내가 외부 브라우저를 열고 표시되는 데이터에 액세스하기 위해 로컬 호스트와 포트에 넣어에서 누군가를 중지하려면. 내 응용 프로그램은 내 서면 서버에 연결된 웹 브라우저가 내장되어 있습니다. 브라우저는 암호 해독 된 콘텐츠를 표시하므로, 내장 된 브라우저의 경우에도 인증을 강요하면 외부 브라우저에 자격 증명이 필요합니다. 내 임베디드 브라우저가 파일에 액세스하려고하면 사용자의 자격 증명을 제공하고 내용을 표시합니다.

답변

1

SWT 3.5M6에는 새 Listener가 있으며 AuthenticationListener를 호출합니다. 단순히 서버에서 전달 된 인증 이벤트를 수신하고 해고됩니다. 아래 코드는 내가 원하는 동작을 수행하는 것입니다. 인증을 기다리고 호스트가 내 응용 프로그램 인 경우 자격 증명을 다시 전달합니다. 물론 적절한 변수를 사용하여 USER_NAME, PASSWORD 및 HOST_NAME을 채우십시오. 그렇지 않으면 브라우저의 인증 대화 상자가 팝업되어 사용자가 자격 증명을 입력하게합니다. 이 코드는 이클립스 SWT 미리보기 페이지에서도 찾을 수 있습니다

webBrowser.addAuthenticationListener를 (새 AuthenticationListener() 답장을

{

 public void authenticate(AuthenticationEvent event) { 
      try { 
       URL url = new URL(event.location); 

       if (url.getHost().equals(HOST_NAME)) 
       { 
        event.user = USER_NAME; 
        event.password = PASSWORD; 
       } 
       else 
       {  
        /* do nothing, let default prompter run */ 
       } 
      } catch (MalformedURLException e) { 
       /* should not happen, let default prompter run */ 
      } 
     } 
    }); 
+0

이 일을 했니? 그것은 나를 위해 아무런 영향을 미치지 않는 것 같고 청취자는 결코 호출되지 않습니다. – willcodejavaforfood

+0

@willcodejavaforfood - AUTHORIZE를 시도하는 경우가 아니라 AUTHORIZE 할 때 작동합니다. 나는 실제로 그 코드를 전혀 치지 않았던 동일한 문제를 가지고있었습니다. 방금 RedWolves와 같은 URL에 자격 증명을 전달했습니다. –

+0

@ Ryan - 감사합니다 :) – willcodejavaforfood

0

사용자가 인증을 위해 표시 할 내용을 제어하려는 경우 로그인의 인증 방법을 변경할 수 있습니다 web.xml의 -config 섹션에서 BASIC에서 FORM으로 이동합니다.

그런 다음 사용자가 인증 할 때 표시 할 페이지를 지정할 수 있습니다. 그런 다음 해당 자격 증명을 미리 채우는 것이 좋습니다. 그러나 보안의 전체 목적을 달성하지 못합니까? 자세한 후

Setting up Authentication for Web Applications

편집 :

내 유일한 제안은 CLIENT-CERT에 인증-방법을 변경하고 클라이언트는 인증서를 제시해야한다 양방향 SSL을 필요로하는 것 서버에. 인증서를 임베디드 브라우저에 설치하면 외부 브라우저에서 인증서를 가져올 수 없음을 확인하면됩니다. 실제로 인증 대화 상자가 표시되지 않도록해야합니다.

+0

감사 설명하는 가장 좋은 방법을 이해하려고 노력. 그래서 여기에 간다 ... 나는 웹 서버를 썼다. 그래서 본질적으로 누군가가 외부 브라우저를 열지 않고 localhost와 포트를 넣는 것을 멈추고 싶다. 나의 앱은 내 서면 서버에 링크 된 내장 된 웹 브라우저를 가지고있다. 브라우저는 해독 된 콘텐츠, 그래서 만약 강제로 내 임베디드 브라우저(), exter 강제로 브라우저에 자격 증명이 필요합니다. 내 임베디드 브라우저가 파일에 액세스하려고하면 사용자의 자격 증명을 제공하고 콘텐츠를 표시합니다. –

+0

OK Ken,이 의견의 내용으로 질문을 업데이트 하시길 권합니다 ... 나는 대답을 업데이트 할 것입니다 –

+0

Michael 씨에게 감사드립니다. 문제를 해결하기 위해 어떤 방법으로 사용할지 모르겠지만 아이디어는 유용합니다. –

1

표시되는 암호가 마음에 들지 않으면 URL을 구성하여 자격 증명을 전달할 수 있습니다. http://username:[email protected] 이것은 인증 상자를 통과 할 것이지만 사용자에게 자격 증명을 보여 주므로 찾고있는 내용이 아닐 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이것이 백그라운드에서 일어나는 것을 원할 것이다. 사용자는 내장 된 브라우저를 사용하여 내 응용 프로그램에 로그인 한 경우 자격 증명이 필요하다는 것을 전혀 알지 못합니다. 그래서 나는 신임장을 비밀로 유지하고 싶다. 이것은 외부 파일/포트에 대한 액세스 권한을 얻으려는 외부 브라우저가 갖고 있지 않은 자격 증명을 필요로합니다. 내 임베디드 브라우저에 대한 자격 증명 만 제공 –

0

귀하의 질문에 약간의 불확실성이 있습니다. 전체 기본 인증은 HTTP 헤더를 기반으로합니다.

브라우저에 권한 헤더가 표시되면 대화 상자가 표시됩니다. 그러면 대화 상자의 내용이 서버로 다시 전송됩니다. 특별한 것은 없습니다. 아이디 사용자 이름 : base64로 인코딩 된 암호입니다.

wikipedia

문제에서 살펴보고하면 방해하는 방법이다. 권한 헤더를 캡처 한 다음 다음 요청에 대해 자격 증명을 포함하도록 HTTP 헤더를 변경해야합니다.

+0

감사합니다. 나는 이미 모든 헤더를 앞뒤로 보내고 있으며, 자격 증명을 입력하면 내용에 액세스 할 수 있습니다. 나는 자바에서 내가 auth 헤더를 가로 챌 수 있다는 것을 알고 싶다. (대화 상자가 표시되지 않도록)이 자격 증명을 채운다. 당신이 진술 한대로 위의 내 의견 중 일부는 기본적으로 귀하의 참조에 대한 내 애플 리케이션을 설명 –

0

을하는 데 도움이

희망 나는이 대부분 브라우저에 의존하는 행동과 어떤 브라우저에 서버 보고서라고 생각합니다. 익명 요청이 401

파이어 폭스에 실패한 후 예를 들어

는 Internet Explorer에서, Microsoft 제품되고, 직접 예를 들어, (당신이 당신의 인터넷 설정에서이 동작을 수정할 수 있습니다) Windows 자격 증명을 보내는 자동 지원 는 암호 관리자를 통해 ID와 암호를 기억하도록 설정되어 있어도 항상 사용자에게 프롬프트를 표시하지 않습니다.IE는 자동 로그인에 실패 할 경우에도 프롬프트를 표시합니다 (예 : ID가 허용되지 않아 Windows 자격 증명이 401으로 표시됨).

저는 웹 개발자로서 가장 기대하고 조화로운 방식으로 작동하도록 서버와 앱을 설정하는 것 외에 많은 것을 제어 할 수 있다고 생각합니다. 가능한 경우 black hat territory에 들어갈 수 있습니다.