在我将操作系统更改为 linux 之前,我的 JSP 项目中的 Tomcat Realm(Forms)身份验证运行良好,现在却不行:登录总是失败。
IDE 就是 IDEA。
项目使用:
- 8.0.9 Tomcat JDBCRealm
- PostgreSQL 9.3
- Postgres JDBC 驱动程序位于/WEB-INF/lib 目录中,Hibernate 可以将其视为
org.postgresql.Driver
- Postgres 登录名和密码正确,表名也正确
server.xml 的变化:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Realm
className="org.apache.catalina.realm.JDBCRealm"
driverName="org.postgresql.Driver"
connectionURL="jdbc:postgresql://localhost:5432/postgres?user=postgres&password=123"
userTable="users"
userNameCol="name"
userCredCol="pass"
userRoleTable="user_roles"
roleNameCol="role"/>
</Realm>
...实际上,除了移动 LockOutRealm
之外,我没有做任何更改。至 <Host>
标记并添加 JDBCRealm
阻止进入。
web.xml
是正确的,因为它之前工作得很好......
为什么不起作用?也许是关于 linux 用户的 特权?
pg_hba.conf:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres md5
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
Postgres 日志:
2014-07-25 19:52:17 MSK LOG: database system was shut down at 2014-07-25 19:52:07 MSK
2014-07-25 19:52:17 MSK LOG: database system is ready to accept connections
2014-07-25 19:52:17 MSK LOG: autovacuum launcher started
2014-07-25 19:53:57 MSK LOG: incomplete startup packet
2014-07-25 19:53:59 MSK LOG: incomplete startup packet
2014-07-25 22:39:38 MSK LOG: unexpected EOF on client connection with an open transaction
2014-07-25 22:42:15 MSK LOG: unexpected EOF on client connection with an open transaction
最佳答案
Tomcat 中的 Realm 是在您的 Web 应用程序外部管理的,因此 JDBC 驱动程序需要对 Tomcat 运行时可用。
这意味着您必须将 jdbc 驱动程序放在 $TOMCAT_HOME/lib
目录中,而不是在您的 webapp 中的 WEB-INF/lib/中。
关于java - Tomcat 领域形式 : login always fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963117/