2010-05-26 3 views
0

Nous avons une application gwt qui utilise jcifs pour extraire le nom d'utilisateur de notre domaine NT. Voici un extrait de notre web.xml:GWT, jcifs et invites multiples pour la connexion

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

donc actuellement lorsque l'utilisateur va à notre site, ils obtiennent environ 2 ou 3 invites répétées en leur demandant de se connecter au domaine même si elles sont déjà (vous devez être sur le domaine pour accéder à notre application). Je voudrais au moins réduire l'incitation à ne se produire qu'une seule fois. Donc, j'allais faire un servlet factice de "/ trunkui/dummy" et laisser cela s'appeler seulement quand je demande le nom. La servlet à distance a cette méthode que nous appelons de manière asynchrone:

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

Alors je voulais faire une sorte d'appel à la servlet factice pour faire le domaine demandant, mais je ne suis pas sûr sur la façon de le faire à partir de la télécommande GWT un service. Ou s'il y a une meilleure façon de le faire?

Répondre

0

Je l'ai compris. J'ai construit le servlet factice et ensuite utilisé un RequestBuilder sur le côté client pour faire un get sur ce servlet. Cette servlet obtient alors l'utilisateurprincipal. Voici le côté client:

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