0

jcifs を使用して NT ドメインからユーザー名を取得する gwt アプリがあります。以下は、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>

そのため、現在、ユーザーが当社のサイトにアクセスすると、すでにドメインにログオンしているにもかかわらず、ドメインにログオンするように求めるプロンプトが 2 つか 3 回繰り返されます (当社のアプリにアクセスするには、ドメインに参加する必要があります)。少なくとも、プロンプトが一度だけ発生するように減らしたいと思います。そのため、「/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 リモート サービスからこれを行う方法がわかりません。または、これを行うためのより良い方法があれば?

4

1 に答える 1

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());
    }
于 2010-05-26T15:31:12.347 に答える