我使用kerberos身份验证与MSSQL数据库进行了Windows集成连接。另外,我使用华夫饼过滤器进行SSO。
此连接使用jtds1.3.1.jar文件。 SSO需要ntlmauth.dll。我使用tomcat作为我的应用程序服务器。
但是,我注意到这只适用于一次部署的一个Web应用程序。如果我有多个webapps的相同设置,所有失败,但一个。这是一个非常奇怪的行为。不知道这里发生了什么
答案 0 :(得分:0)
https://stackoverflow.com/a/10645025/3890202
每个Web应用程序都有自己的Classloader(隔离它们)。当您调用Class.forName()方法时,有一个静态块正在尝试加载共享库(dll文件) - 因此两个Web应用程序都试图加载共享库,因此第二个时会出现错误消息试图加载。
JDBC jar即jtds1.3.1.jar应该从与你的战争捆绑在一起移动到tomcat 7.0 / lib文件夹并将ntlmauth.dll复制到tomcat / bin文件夹 - 这样它将在tomcat父目录中classloader,该类只会被加载一次。