SQLException:此驱动程序未配置为集成身份验证tomcat

时间:2018-01-09 13:58:01

标签: java sql-server tomcat

尝试通过java Web应用程序连接MS SQL服务器。

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

connection= DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=XXX;integratedSecurity=true");

我已将“sqljdbc_auth.dll”复制到$ Tomcat_home / bin并将jar复制到$ Tomcat_home / lib文件夹中。

我在同一个tomcat实例中有多个Web应用程序。

第一个webApp加载并成功建立与MS SQL的连接。

但其余的应用无法连接到MS SQL提示:

com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication. ClientConnectionId:41d72756-1383-427e-8c4f-c3075ae1559a
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2400)
at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:68)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3132)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)     

注意: Tomcat作为Windows服务运行。并且MSSQL配置为Windows身份验证。

修改: 据我所知,本机库(DLL)只能加载到JVM一次,因此出错,但是我在浏览网络后仍然没有解决方案。

2 个答案:

答案 0 :(得分:1)

JDBC驱动程序支持通过integratedSecurity连接字符串属性在Windows操作系统上使用Type 2集成身份验证。要使用集成身份验证,请将sqljdbc_auth.dll文件复制到安装JDBC驱动程序的计算机上Windows系统路径上的目录中。

或者,您可以设置java.libary.path系统属性以指定sqljdbc_auth.dll的目录。例如,如果JDBC驱动程序安装在缺省目录中,则可以在启动Java应用程序时使用以下虚拟机(VM)参数指定DLL的位置:

-Djava.library.path=c:/sqljdbc_<version>/enu/auth/x86

-Djava.library.path=c:/sqljdbc_<version>/enu/auth/x64

请在原始文档中阅读更多信息: https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-2017

答案 1 :(得分:0)

sqljdbc_auth.dll需要使用Windows身份验证或Kerberos身份验证。

Microsoft获取dll并通过以下方式安装:

  1. 放在应用程序库文件夹中
  2. 放在Java bin文件夹中。

    如果要打包所有 依赖性。另外,它需要找到正在使用的Java版本 用过,从哪条路径走。

  3. 将库放在某个文件夹中,然后在命令行中添加路径:

    java -Djava.library.path=<library path>...
    

mssql-jdbc驱动程序和sqljdbc_auth.dll应该是:

  • 在同一文件夹中
  • 都是同一版本
  • 对于同一体系结构(x86 / x64),JVM正在运行。

还要检查具有Java版本的jdbc可比性矩阵。

相关问题