WAS Liberty:未针对集成身份验证配置 sqljdbc 驱动程序
WAS Liberty: sqljdbc driver not configured for integrated authentication
我在将 Web 应用程序从 Tomcat 6 迁移到 WAS Liberty 8.5.5.8 时遇到数据库连接问题。
在 WAS Liberty 上我收到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication
我已将 "sqljdbc4.jar" 放入应用程序 WEB-INF\lib-folder 中。我已尝试将文件 "sqljdbc_auth.dll" 放置在不同的地方,例如应用程序 WEB-INF\lib-folder、WAS Liberty bin 文件夹、WAS Liberty lib 文件夹。但是 none 解决了我的问题。
在 Tomcat 上,我将 "sqljdbc4.jar" 放在 Tomcat lib 文件夹中,将 "sqljdbc_auth.dll" 放在 Tomcat bin 文件夹中,然后它就可以工作了。
我怀疑我将 "sqljdbc_auth.dll" 文件放在了错误的位置,但我不知道该放在哪里。我无法在网上找到任何指定在 WAS Liberty 上放置文件的位置。
首先,我建议您为应用程序使用数据源,而不是原始 JDBC 驱动程序。通过使用数据源(在应用程序服务器上配置时由容器管理),您将受益于应用程序服务器完成的许多固有优化,例如连接池和事务支持。
请注意,DataSource 并非特定于 WAS Liberty,在任何应用程序服务器中,通过使用容器管理的 DataSource 而不是原始 JDBC 驱动程序,您将以较低的开发成本获得更高的性能。
配置数据源:
在 server.xml 中配置 DataSource 和 JDBC 库:
<!-- Enable JDBC and JNDI features (at least) -->
<featureManager>
<feature>jdbc-4.1</feature>
<feature>jndi-1.0</feature>
</featureManager>
<dataSource id="MyDataSource" jndiName="jdbc/MyDataSource">
<jdbcDriver libraryRef="MSJDBCLib"/>
<properties.microsoft.sqlserver databaseName="SAMPLEDB" serverName="localhost" portNumber="1433"/>
</dataSource>
<library id="MSJDBCLib">
<fileset dir="C:/path/to/sqljdbc4.jar"/>
<!-- To have authentication support, add the dll to the library -->
<fileset dir="C:/path/to/sqljdbc_auth.dll"/>
</library>
参见 IBM 文档:Configuring database connectivity in Liberty
回答您的问题的关键是在您的 <library>
元素中添加指向 auth dll 文件的 <fileset>
元素,如下所示:
<!-- To have authentication support, add the dll to the library -->
<fileset dir="C:/path/to/sqljdbc_auth.dll"/>
要使用数据源:
以前,你可能做过这样的事情:
String connectionURL = "jdbc:sqlserver://localhost:1433;DatabaseName=YourDBName;user=UserName;Password=YourPassword";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(connectionUrl);
使用数据源,您可以注入它们或使用 JNDI 查找它们:
注入:
@Resource(lookup = "jdbc/MyDataSource")
DataSource myDataSource;
...
Connection con = myDataSource.getConnection();
JNDI 查找:
DataSource myDataSource = new InitialContext().lookup("jdbc/MyDataSource");
Connection conn = myDataSource.getConnection();
我在将 Web 应用程序从 Tomcat 6 迁移到 WAS Liberty 8.5.5.8 时遇到数据库连接问题。
在 WAS Liberty 上我收到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication
我已将 "sqljdbc4.jar" 放入应用程序 WEB-INF\lib-folder 中。我已尝试将文件 "sqljdbc_auth.dll" 放置在不同的地方,例如应用程序 WEB-INF\lib-folder、WAS Liberty bin 文件夹、WAS Liberty lib 文件夹。但是 none 解决了我的问题。
在 Tomcat 上,我将 "sqljdbc4.jar" 放在 Tomcat lib 文件夹中,将 "sqljdbc_auth.dll" 放在 Tomcat bin 文件夹中,然后它就可以工作了。
我怀疑我将 "sqljdbc_auth.dll" 文件放在了错误的位置,但我不知道该放在哪里。我无法在网上找到任何指定在 WAS Liberty 上放置文件的位置。
首先,我建议您为应用程序使用数据源,而不是原始 JDBC 驱动程序。通过使用数据源(在应用程序服务器上配置时由容器管理),您将受益于应用程序服务器完成的许多固有优化,例如连接池和事务支持。
请注意,DataSource 并非特定于 WAS Liberty,在任何应用程序服务器中,通过使用容器管理的 DataSource 而不是原始 JDBC 驱动程序,您将以较低的开发成本获得更高的性能。
配置数据源:
在 server.xml 中配置 DataSource 和 JDBC 库:
<!-- Enable JDBC and JNDI features (at least) -->
<featureManager>
<feature>jdbc-4.1</feature>
<feature>jndi-1.0</feature>
</featureManager>
<dataSource id="MyDataSource" jndiName="jdbc/MyDataSource">
<jdbcDriver libraryRef="MSJDBCLib"/>
<properties.microsoft.sqlserver databaseName="SAMPLEDB" serverName="localhost" portNumber="1433"/>
</dataSource>
<library id="MSJDBCLib">
<fileset dir="C:/path/to/sqljdbc4.jar"/>
<!-- To have authentication support, add the dll to the library -->
<fileset dir="C:/path/to/sqljdbc_auth.dll"/>
</library>
参见 IBM 文档:Configuring database connectivity in Liberty
回答您的问题的关键是在您的 <library>
元素中添加指向 auth dll 文件的 <fileset>
元素,如下所示:
<!-- To have authentication support, add the dll to the library -->
<fileset dir="C:/path/to/sqljdbc_auth.dll"/>
要使用数据源:
以前,你可能做过这样的事情:
String connectionURL = "jdbc:sqlserver://localhost:1433;DatabaseName=YourDBName;user=UserName;Password=YourPassword";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(connectionUrl);
使用数据源,您可以注入它们或使用 JNDI 查找它们:
注入:
@Resource(lookup = "jdbc/MyDataSource")
DataSource myDataSource;
...
Connection con = myDataSource.getConnection();
JNDI 查找:
DataSource myDataSource = new InitialContext().lookup("jdbc/MyDataSource");
Connection conn = myDataSource.getConnection();