部署后,Tomcat JDBCRealm身份验证不起作用

时间:2013-09-10 10:26:00

标签: java authentication deployment tomcat7 jdbcrealm

我有一个通过eclipse(本地)工作的Web应用程序,但在我使用war文件将其部署到服务器后,身份验证不起作用,我在尝试登录时一直收到失败页面。

我看到数据库中存在用户名和密码,并且使用数据库的页面显示用户列表有效。

在server.xml中我有这个条目:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>


    <Context docBase="aid" path="/aid" reloadable="true" source="org.eclipse.jst.jee.server:aid">
       <Realm allRolesMode="authOnly" className="org.apache.catalina.realm.JDBCRealm" connectionURL="jdbc:mysql://localhost:3306/aid?user=root&amp;password=root" driverName="com.mysql.jdbc.Driver" roleNameCol="Role" userCredCol="Password" userNameCol="Username" userRoleTable="ROLES" userTable="USERS"/>
    </Context>
  </Host>
  • 假设数据库的名称为“aid”,用户名和密码为“root”
  • 该应用程序部署在/ webapps / aid
  • tomcat版本是7.0.26

我的猜测是我错过了tomcat身份验证机制的配置。有什么想法吗?

更新

这是我得到的例外:

SEVERE:执行身份验证的异常 java.sql.SQLException:com.mysql.jdbc.Driver         在org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:701)         在org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:352)         在org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:295)         在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:450)         在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)         在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)         在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)         在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)         在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)         at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)         在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:309)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)         在java.lang.Thread.run(Thread.java:679)

引起:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver         在java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)         at java.security.AccessController.doPrivileged(Native Method)         在java.net.URLClassLoader.findClass(URLClassLoader.java:205)         at java.lang.ClassLoader.loadClass(ClassLoader.java:321)         at java.lang.ClassLoader.loadClass(ClassLoader.java:266)         at java.lang.Class.forName0(Native Method)         at java.lang.Class.forName(Class.java:188)         在org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:697)         ......还有14个

1 个答案:

答案 0 :(得分:1)

它表示可能存在类路径问题。

Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

mysql-connector-java-3.1.14-bin.jar可能在服务器类路径中丢失,而它在eclipse中存在。

检查日食中的构建路径并找出jar的位置。然后添加位置/ jar路径 - &gt;在shared.loader的{​​{1}}或common.loader property中指定。

您可能希望在http://www.mulesoft.com/tomcat-classpath

上阅读有关tomcat类路径问题/解决方案的更多信息