【发布时间】:2023-04-09 17:43:01
【问题描述】:
我正在尝试配置 tomcat 以使用 SQL Server 进行身份验证。我修改了server.xml 如下:
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<!--This is only applicable for Tomcat 8.5 and higher version with SQL server authentication-->
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionURL="jdbc:sqlserver://xxx.xx.xxx.xxx:1433;databaseName=xxxx" connectionName="user" connectionPassword="password" userTable="xx" userNameCol="username" userCredCol="password"/>
</Realm>
但是,每次我尝试进行身份验证时都会收到以下错误:
严重:执行身份验证时出现异常 com.microsoft.sqlserver.jdbc.SQLServerException:关键字“null”附近的语法不正确。 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1535) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:467) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:409) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2478) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:219) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:199) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:331) 在 org.apache.catalina.realm.JDBCRealm.getRoles(JDBCRealm.java:601) 在 org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:404) 在 org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:326) 在 org.apache.catalina.realm.CombinedRealm.authenticate(CombinedRealm.java:193) 在 org.apache.catalina.realm.LockOutRealm.authenticate(LockOutRealm.java:158) 在 org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:84) 在 org.apache.catalina.authenticator.AuthenticatorBase.authenticate(AuthenticatorBase.java:700) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:599) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)
2017 年 9 月 21 日下午 12:00:59 org.apache.catalina.realm.JDBCRealm getRoles 严重:执行身份验证的异常 com.microsoft.sqlserver.jdbc.SQLServerException:关键字“null”附近的语法不正确。 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1535) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:467) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:409) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2478) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:219) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:199) 在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:331) 在 org.apache.catalina.realm.JDBCRealm.getRoles(JDBCRealm.java:601) 在 org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:404) 在 org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:326) 在 org.apache.catalina.realm.CombinedRealm.authenticate(CombinedRealm.java:193) 在 org.apache.catalina.realm.LockOutRealm.authenticate(LockOutRealm.java:158) 在 org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:84) 在 org.apache.catalina.authenticator.AuthenticatorBase.authenticate(AuthenticatorBase.java:700) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:599) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)
我已将mssql-jdbc-6.2.1.jre8.jar 放入lib 文件夹中。
【问题讨论】:
标签: java sql-server tomcat jdbc jdbcrealm