【问题标题】:Creating JDBCRealm with postgres driver使用 postgres 驱动程序创建 JDBCRealm
【发布时间】:2014-02-05 15:07:34
【问题描述】:

所以我试图为我的应用程序创建一个 JDBCRealm,而不是使用来自 tomcat-users.xml 的用户。

我已将 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"/> -->


    <Realm className="org.apache.catalina.realm.JDBCRealm"
             debug="99"
             driverName="org.postgresql.Driver" 
             connctionURL="jdbc:postgresql://localhost:5432/MyDataBase"
             connectionName="xxxxxxxx"
             ConnectionPassword="xxxxxxxx"
             userTable="authUsers" userNameCol="name" userCredCol="password"
             userRoleTable="authRole" roleNameCol="role" />
  </Realm>

所以 - UserDatabaseRealm 被注释掉了,而是我放入了我的 JDBCRealm 元素。

但由于某种原因,当我启动我的 tomcat 时,我不断收到 nullPointerException, 源自 postgres 驱动程序类:

org.apache.catalina.LifecycleException: Failed to start component [Realm[JDBCRealm]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.realm.CombinedRealm.startInternal(CombinedRealm.java:201)
at org.apache.catalina.realm.LockOutRealm.startInternal(LockOutRealm.java:120)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1109)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: java.lang.NullPointerException
at org.postgresql.Driver.connect(Driver.java:232)
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:710)
at org.apache.catalina.realm.JDBCRealm.startInternal(JDBCRealm.java:788)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 17 more

我使用 tomcat 7 和 postgres 9.3,我用于驱动程序的 jar 是 postgresql-9.3-1100.jdbc4.jar。

任何想法为什么它不起作用?此驱动程序有任何已知的错误吗?还是我的元素中有什么?

谢谢!

【问题讨论】:

  • 看起来 Tomcat 正在将 null JDBC URL 传递给我。

标签: postgresql tomcat tomcat7 jdbcrealm server.xml


【解决方案1】:

答案非常简单:

connctionURL="jdbc:postgresql://localhost:5432/MyDataBase"

找出参数名称中的拼写错误。

由于您没有提供connectionURL 参数,驱动程序无法正确初始化,因此出现异常。

【讨论】:

  • 相当。此类问题往往会被标记为删除,这里我们有一个特色问题。
【解决方案2】:
<JDBCRealm"
debug="99" driverName="org.gjt.mm.mysql.Driver" 
connectionURL="jdbc:mysql://localhost/authority?            
user=test;password=test" userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" /> 

更多解释请参考以下链接...

https://tomcat.apache.org/tomcat-3.3-doc/JDBCRealm-howto.html

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多