Estou configurando uma aplicação teste para usar JDBCRealm no Tomcat 6, segue a coonfiguração da aplicação:
server.xml
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="org.postgresql.Driver"
connectionURL="jdbc:postgresql://localhost:5432/user"
connectionName="xxx" connectionPassword="xxx"
digest="MD5"
userTable="user" userNameCol="login" userCredCol="password"
userRoleTable="role" roleNameCol="role" />
web.xml
<display-name>testeLogin</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>suporte</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Página do Suporte</web-resource-name>
<url-pattern>/suporte.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>suporte</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Página do Administrador</web-resource-name>
<url-pattern>/admin.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/loginerror.jsp</form-error-page>
</form-login-config>
</login-config>
<error-page>
<error-code>403</error-code>
<location>/erro403.jsp</location>
</error-page>
login.jsp
<form action="j_security_check" method="post">
<fieldset>
<legend>Login</legend>
<label id="labelUser" for="inputUser">Id</label>
<input id="inputUser" type="text" name="j_username" maxlength="20"/><br/>
<label id="labelPassword" for="inputPassword">Password</label>
<input id="inputPassword" type="password" name="j_password" maxlength="12"/><br/>
<button type="submit">Log in</button>
</fieldset>
</form>
Minha base de dados foi gerada pelo sql:
CREATE TABLE "user"
(
"login" character(20) NOT NULL,
"password" character(32) NOT NULL,
CONSTRAINT "PK_user" PRIMARY KEY (login)
)
WITH (OIDS=FALSE);
ALTER TABLE "user" OWNER TO xxx;
CREATE TABLE "role"
(
"login" character(20) NOT NULL,
"role" character(15) NOT NULL,
CONSTRAINT "PK_role" PRIMARY KEY (login, role)
)
WITH (OIDS=FALSE);
ALTER TABLE "role" OWNER TO xxx;
Acredito ter feito as configurações todas corretas, porém quando tento autenticar (depois de preencher o form de login) acontece o seguinte erro:
org.apache.catalina.realm.JDBCRealm getPassword
SEVERE: Exception performing authentication
org.postgresql.util.PSQLException: ERRO: coluna "password" não existe
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255)
at org.apache.catalina.realm.JDBCRealm.getPassword(JDBCRealm.java:548)
at org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:401)
at org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:349)
at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:181)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:394)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
O que poderia ser isso? Nos arquivos de configuração expostos, vocês encontraram algum erro ou alguma coisa faltando?
Não entendo porque ele não está encontrando a coluna password, inclusive já me certifiquei que a base de dados é a mesma passada na configuração do Realm e o .jar com o driver está na pasta /lib do tomcat.
Me deem uma luz ^^