Frage

Wir haben eine GWT app, dass Anwendungen jCIFS den Benutzernamen aus unserer NT-Domäne zu ziehen. Hier ist ein Clip unserer 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>

So zur Zeit, wenn der Benutzer auf unserer Seite geht sie erhalten etwa 2 oder 3 wiederholte Aufforderungen, bat sie, auf der Domäne anmelden, obwohl sie bereits sind (Sie müssen in der Domäne sein, um unsere App zu bekommen). Ich möchte zumindest reduzieren die Aufforderung nur einmal geschehen. Also wollte ich einen Dummy-Servlet-off von „/ trunkui / Dummy“ machen und lassen die nur aufgerufen werden, wenn ich nach dem Namen fragen. Das Remote-Servlet hat diese Methode, dass wir rufen Sie asynchron:

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

So wollte ich eine Art Aufruf an das Dummy-Servlet tun, um die Domäne zu tun auffordert, aber ich bin nicht sicher, wie man dies von dem GWT Remote-Service zu tun. Oder wenn es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

dachte ich es aus. Ich baute das Dummy-Servlet und verwenden dann eine RequestBuilder auf der Client-Seite ein get an diesem Servlet zu tun. Das Servlet bekommt dann die Userprincipal. Hier ist die Client-Seite:

    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());
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top