当前位置: 首页 > 知识库问答 >
问题:

tomcat中的JDBC领域配置

黄沈浪
2023-03-14
<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.doexecutePreparedStatement.467在dscommand.execute(iobuffer.java:7151)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeCommand(sqlserverstatement.java:2478)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeCommand(sqlserverstatement.java:219)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeStatement(sqlserverstatement.java:199)在m.getRoles(jdbcrealm.java:601)在org.apache.catalia.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.lockinedrealm.authenticate(lockinedrealm.java:158)在authenticatorbase.invoke(authenticatorbase.java:599)在org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:140)在org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.invoke(errorreportvalve.java:79)在org.apache.catalina.valves.abractAccessLogvalve.invoke(阿切。科约te.http11.http11processor.service(http11processor.java:1110)在org.apache.coyote.abstractProcessorlight.process(abstractProcessorlight.java:66)在org.apache.coyote.abstractProtocol.process(abstractProcessor.java:785)在org.apache.tomcat.util.net.nioEndpoint$socketProcessor.dorun(nioEndpoint.java:1425)在readPoolExecutor$worker.run(来源未知)位于org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)位于java.lang.thread.run(来源未知)

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.doexecutePreparedStatement.467在dscommand.execute(iobuffer.java:7151)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeCommand(sqlserverstatement.java:2478)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeCommand(sqlserverstatement.java:219)在com.microsoft.sqlserver.jdbc.sqlserverstatement.executeStatement(sqlserverstatement.java:199)在m.getRoles(jdbcrealm.java:601)在org.apache.catalia.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.lockinedrealm.authenticate(lockinedrealm.java:158)在authenticatorbase.invoke(authenticatorbase.java:599)在org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:140)在org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.invoke(errorreportvalve.java:79)在org.apache.catalina.valves.abractAccessLogvalve.invoke(阿切。科约te.http11.http11processor.service(http11processor.java:1110)在org.apache.coyote.abstractProcessorlight.process(abstractProcessorlight.java:66)在org.apache.coyote.abstractProtocol.process(abstractProcessor.java:785)在org.apache.tomcat.util.net.nioEndpoint$socketProcessor.dorun(nioEndpoint.java:1425)在readPoolExecutor$worker.run(来源未知)位于org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)位于java.lang.thread.run(来源未知)

我已经将MSSQL-JDBC-6.2.1.jre8.jar放入lib文件夹中。

共有1个答案

岳俊雅
2023-03-14

您的问题似乎在于您没有为用户分配具有角色的指定表。根据有关JDBC领域的Tomcat文档:

  • 必须有一个表,下面引用为user roles表,该表包含分配给特定用户的每个有效角色的一行。用户拥有零个、一个或多个有效角色是合法的。
  • 用户角色表必须至少包含两列(如果现有应用程序需要,它可以包含更多列):
    • Tomcat要识别的用户名(与users表中指定的值相同)。
    • 与此用户关联的有效角色的角色名称

    异常堆栈也证实了这样的猜测

    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:331)
    at org.apache.catalina.realm.JDBCRealm.getRoles(JDBCRealm.java:601)
    at org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:404)
    
    <Realm className="org.apache.catalina.realm.JDBCRealm"
           driverName="org.gjt.mm.mysql.Driver"
           connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;
           password=dbpass"
           userTable="users" userNameCol="user_name" userCredCol="user_pass"
           userRoleTable="user_roles" roleNameCol="role_name"/>
    

 类似资料:
  • 问题内容: 我试图使用JDBC领域创建登录页面,但是没有用。 我的步骤: 创建数据库,用户和组表 创建连接池和数据源,自定义领域。 添加安全角色映射,登录约束,安全约束和安全角色。 创建登录jsp和登录servlet 我可以在创建过程中ping连接池。 执行上述任务所需的最低配置是多少? 我的代码: web.xml glassfish-web.xml Login.jsp: LoginControl

  • [2014-07-01T10:21:44.679+0300][glassfish 4.0][SEVERE][][org.glassfish.adminGui][TID:_ThreadId=37_ThreadName=Admin-Listener(4)][TimeMillis:1404199304679][LevelValue:1000][[RestResponse.GetResponse()给出失

  • 问题内容: 我一直在忙于在GlassFish 3.1上设置身份验证,尤其是JDBC领域。我一直在假设以下条件下进行操作: “用户”表包含登录名(“电子邮件地址”)和密码(“密码”) “组”表包含组名称(“名称”)的列表 “ User_Group”表匹配用户和组。 但是,我无法在任何地方配置“ User_Group”表,因此我想知道服务器如何将用户按组进行匹配。不用说它没有用。但仔细检查后发现: “

  • 3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合

  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi