【发布时间】:2013-09-14 00:23:21
【问题描述】:
我有一个通过 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 "%r" %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&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(本机方法) 在 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(本机方法) 在 java.lang.Class.forName(Class.java:188) 在 org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:697) ... 14 更多
【问题讨论】:
-
能否请您记录异常并在此处发布?
-
@gyan 我添加了例外。
-
我刚刚发现它可能是缺少 mysql jar,正在检查...
-
我在答案中添加了类似的分析,希望对您有所帮助。
标签: java authentication deployment tomcat7 jdbcrealm