通过JDBC领域进行Tomcat 6.0管理器身份验证

时间:2009-10-01 07:44:45

标签: mysql tomcat jdbc realm

**我想通过JDBC领域配置来配置Tomcat6.0身份验证。**** 我检查了以下内容:

- 我的所有“用户”和“角色”都存储在MySQL数据库中。

-MySQL JDBC驱动器位于tomcat \ lib目录

-Tomcat-user-xml被修改为以下领域

  

< -Realm   className =“org.apache.catalina.realm.JDBCRealm”driverName =“org.gjt.mm.mysql.Driver”            connectionName =“XXX”connectionPassword =“YYY”            的ConnectionURL = “JDBC:MySQL的://本地主机/ MYDB”            消化= “MD5”            userTable =“users”userNameCol =“username”   userCredCol = “密码”            userRoleTable =“user_roles”roleNameCol =“rolename”/>

每当我尝试运行Tomcat并尝试运行'Manager'时,它会在浏览器上抛出Authentication错误 和 Catalina.log 每次都包含以下错误日志。

  

SCHWERWIEGEND:异常开放   数据库连接   java.sql.SQLException:访问被拒绝   对于用户   'XXX',密码= XXXX '@' 本地主机”   (使用密码:否)at   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)   在   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)   在   com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)   在   com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)   在   com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)   在   com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3996)   在   com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1284)   在   com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)   在   com.mysql.jdbc.ConnectionImpl。(ConnectionImpl.java:781)   在   com.mysql.jdbc.JDBC4Connection。(JDBC4Connection.java:46)   在   sun.reflect.NativeConstructorAccessorImpl.newInstance0(母语   方法)at   sun.reflect.NativeConstructorAccessorImpl.newInstance(未知   来源)at   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知   来源)at   java.lang.reflect.Constructor.newInstance(未知   来源)at   com.mysql.jdbc.Util.handleNewInstance(Util.java:406)   在   com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)   在   com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)   在   org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:703)   在   org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:775)   在   org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1037)   在   org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)   在   org.apache.catalina.core.StandardService.start(StandardService.java:516)   在   org.apache.catalina.core.StandardServer.start(StandardServer.java:710)   在   org.apache.catalina.startup.Catalina.start(Catalina.java:583)   在   sun.reflect.NativeMethodAccessorImpl.invoke0(母语   方法)at   sun.reflect.NativeMethodAccessorImpl.invoke(未知   来源)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(未知   来源)at   java.lang.reflect.Method.invoke(未知   来源)at   org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)   在   org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

请有人知道出了什么问题,以及在哪一点上。

由于

3 个答案:

答案 0 :(得分:1)

将其用作:

<Realm  className="org.apache.catalina.realm.JDBCRealm" 
connectionURL="jdbc:mysql://localhost/mydb?user=XXX&amp;password=YYY" 
driverName="com.mysql.jdbc.Driver"
     ...
rest same as before/>

答案 1 :(得分:0)

从例外情况看,数据库用户的用户名和/或密码似乎不正确。确保它们拼写正确,并且实际创建了具有适当访问权限的数据库用户。

答案 2 :(得分:0)

当我的server.xml如下时,我遇到了同样的问题:

<Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"  
          driverName="com.mysql.jdbc.Driver"  
          connectionURL="jdbc:mysql://localhost:3306/authorization"  
          connectionName="root" 
          connectionPassword="xxxxx"  
          userTable="user_table" 
          userNameCol="user"      
          userCredCol="password"  
          userRoleTable="role_table" 
          roleNameCol="role" /> 

但最后我发现它在tomcat7中出错了,它应该是:

<Realm  className="org.apache.catalina.realm.JDBCRealm"
          driverName="com.mysql.jdbc.Driver"  
          connectionURL="jdbc:mysql://localhost:3306/authorization?user=root&amp;password=xxxxxx"   
          userTable="user_table" 
          userNameCol="user"      
          userCredCol="password"  
          userRoleTable="role_table" 
          roleNameCol="role" />