java - Tomcat JDBCRealm 身份验证在部署后不起作用

标签 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 身份验证机制的配置。有什么想法吗?

更新

这是我遇到的异常:

严重:执行身份验证时出现异常 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) 在 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) 在 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) 在 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) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:205) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:321) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:266) 在 java.lang.Class.forName0( native 方法) 在 java.lang.Class.forName(Class.java:188) 在 org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:697) ... 14 更多

最佳答案

这表明可能存在类路径问题。

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

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

检查 Eclipse 中的构建路径并找出 jar 的位置。然后添加location/jar路径->在/conf/catalina.propertiesshared.loadercommon.loader property中指定。

您可能想阅读有关 tomcat 类路径问题/解决方案的更多信息:http://www.mulesoft.com/tomcat-classpath

关于java - Tomcat JDBCRealm 身份验证在部署后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716430/

相关文章:

java - java中快速移动物体的平滑动画

java - 返回缩写的 Get 方法

java - 使用 javamail 从我的 gmail 中读取所有新邮件

ruby-on-rails - 何时开始考虑部署我的 Rails 应用程序

python - 使用 ElasticBeanstalk 在 AWS 上部署在 Python 3.6 上运行的 Django 项目

JavaFX:设置菜单项中图形节点和文本之间的间隙

c# - ASP.NET MVC 中的身份 cookie 身份验证

security - Golang WebSocket 应用程序中的身份验证

authentication - 使用 apache 身份验证中的用户名覆盖 Mercurial 用户名

python - 有没有办法为所有应用程序使用相同的 Docker 容器?