2010-05-26 4 views
0

우리는 NT 도메인에서 사용자 이름을 가져 오기 위해 jcifs를 사용하는 gwt 앱을 가지고 있습니다. 여기에 우리의 web.xml의 클립입니다 : 그래서 현재 그들은 약 2 ~ 3 반복 프롬프트가 이미있는 경우에도 도메인에 로그온하도록 요청받을 사용자가 사이트에 갈 때로그인을위한 GWT, jcifs 및 복수 프롬프트

<filter> 
    <filter-name>NtlmHttpFilter</filter-name> 
    <filter-class>com.xxx.gwt.server.MyNTLMFilter</filter-class> 

    <init-param> 
     <param-name>jcifs.netbios.wins</param-name> 
     <param-value>192.168.109.20</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jcifs.smb.client.domain</param-name> 
     <param-value>its</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>NtlmHttpFilter</filter-name> 
    <url-pattern>/trunkui/greet</url-pattern> 
</filter-mapping> 

<!-- Servlets --> 
<servlet> 
    <servlet-name>greetServlet</servlet-name> 
    <servlet-class>com.xxx.gwt.server.GreetingServiceImpl</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>greetServlet</servlet-name> 
    <url-pattern>/trunkui/greet</url-pattern> 
</servlet-mapping> 

가 (당신이해야 우리의 애플 리케이션에 도착하는 도메인에있어). 나는 적어도 한 번만 일어날 것을 촉구하고 싶습니다. 그래서 "/ trunkui/dummy"의 더미 서블릿을 만들어서 이름을 요구할 때만 호출하도록했습니다. 원격 서블릿은 우리가 비동기 호출이 방법이 있습니다

public String getUser() { 
    String userAgent = ""; 
    try { 
     userAgent = getThreadLocalRequest().getUserPrincipal().getName(); 

     int slashIdx = -1; 
     if ((slashIdx = userAgent.indexOf('\\')) >= 0) 
      userAgent = userAgent.substring(slashIdx + 1); 
    } catch (Exception npe) { 
     npe.printStackTrace(); 
    } 
    return userAgent; 
} 

그래서 내가 도메인이 메시지를 표시 할 더미 서블릿 호출의 일종을하고 싶었다, 그러나 나는 GWT 원격에서이 작업을 수행하는 방법에 대한 확신입니다 서비스. 아니면 이것을 할 수있는 더 좋은 방법이 있다면?

답변

0

나는 그것을 알아 냈다. 더미 서블릿을 작성한 다음 클라이언트 측에서 RequestBuilder를 사용하여 해당 서블릿을 가져 왔습니다. 그 서블릿은 userprincipal을 얻습니다. 다음은 클라이언트 측입니다.

RequestBuilder getNameRB = new RequestBuilder(RequestBuilder.GET, "naming"); 
    getNameRB.setCallback(new RequestCallback() { 

     @Override 
     public void onResponseReceived(Request request, Response response) { 
      loadUserName(response.getText()); 
     } 

     @Override 
     public void onError(Request request, Throwable exception) { 
      Window.alert("Unable to authenticate user\n"+exception.getMessage()); 
      Window.Location.replace("http://ccc"); 
     } 
    }); 
    try { 
     getNameRB.send(); 
    } catch (RequestException e) { 
     Window.alert(e.getMessage()); 
    }