我们有一个 gwt 应用程序,它使用 jcifs 从我们的 NT 域中提取用户名。这是我们的 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”中创建一个虚拟 servlet,并且仅在我询问名称时才调用它。远程 servlet 有这个我们异步调用的方法:
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;
}
因此,我想对虚拟 servlet 进行某种调用以进行域提示,但我不确定如何从 gwt 远程服务执行此操作。或者如果有更好的方法来做到这一点?