java - Tomcat 领域形式 : login always fails

标签 java linux postgresql tomcat jdbcrealm

在我将操作系统更改为 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 &quot;%r&quot; %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&amp;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/

相关文章:

sql - PostgreSQL 不在多个通配符中

Java JSON RESTful Web 服务 - 过滤字段

java - 将组件绘制到 BufferedImage 会导致显示损坏

java - j2ssh sshclient 不等待远程命令完成

javascript - 是否可以从本地主机加载一个特定文件?

postgresql - 如果月份是十二月,则年份增加 1

Angularjs:具有直通关系的多对多

java - 我可以在 Scala 中将本地 var 作为 Volatile,因为在 Java 中这是不可能的吗?

linux - 在 X 根窗口上绘图

linux - 没有错误时 Bash 错误重定向创建文件