Domanda

Abbiamo un'applicazione GWT che utilizza JCIFS per tirare il nome utente dal nostro dominio NT. Ecco una clip del nostro web.xml:

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

Al momento, quando l'utente va al nostro sito ottengono circa 2 o 3 ripetute richieste chiedendo loro di accedere al dominio anche se già sono (devi essere sul dominio per raggiungere la nostra app). Vorrei almeno ridurre l'impulso per accadere una sola volta. Così stavo per fare una servlet fittizio off di "/ trunkui / fittizio" e lasciare che vengono chiamato solo quando chiedo il nome. Il servlet telecomando ha questo metodo che noi chiamiamo in modo asincrono:

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

Così ho voluto fare una sorta di chiamata al servlet manichino per fare il dominio spingendo, ma sono sicuro su come fare questo dal servizio remoto gwt. O se c'è un modo migliore per fare questo?

È stato utile?

Soluzione

ho capito. Ho costruito il servlet manichino e poi usato una RequestBuilder sul lato client per fare un salire su quel servlet. Questo servlet quindi ottiene l'userprincipal. Ecco il lato 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());
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top