Tomcat JDBC vs. DataSource Realm
Para webapptestapp
que tem o seguinte em seu web.xml (entre outras coisas)
<security-constraint>
<web-resource-collection>
<web-resource-name>My JSP</web-resource-name>
<url-pattern>*.secured</url-pattern>
<url-pattern>/login</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>mobileusers</role-name>
</auth-constraint>
<!--
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
-->
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Identity</realm-name>
</login-config>
<security-role>
<description>
No Description
</description>
<role-name>mobileusers</role-name>
</security-role>
Considere as seguintes duas configurações do Tomcat Realm:
Configuração 1 - JDBC Realm:
Em.../webapps/testapp/META-INF/context.xml
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionName="mysqluser"
connectionPassword="redacted"
connectionURL="jdbc:mysql://192.168.1.5/testdb?autoReconnectForPools=true&characterEncoding=UTF-8"
digest="MD5"
userTable="Users"
userNameCol="name"
userCredCol="password"
userRoleTable="Users"
roleNameCol="roleName"
/>
Configuração 2 - DataSource Realm:
Em.../webapps/testapp/META-INF/context.xml
:
<Realm className="org.apache.catalina.realm.DataSourceRealm"
digest="MD5"
userTable="Users"
userNameCol="name"
userCredCol="password"
userRoleTable="Users"
roleNameCol="roleName"
dataSourceName="jdbc/testDB"
/>
E em.../conf/context.xml
:
<Resource
name="jdbc/testDB"
auth="Container"
type="javax.sql.DataSource"
removeAbandoned="true"
removeAbandonedTimeout="15"
maxActive="5"
maxIdle="5"
maxWait="7000"
username="mysqluser"
password="redacted"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.5/testdb?autoReconnectForPools=true&characterEncoding=UTF-8"
factory="com.mycompany.util.configuration.customfactory"
validationQuery="SELECT '1';"
testOnBorrow="true"/>
Por motivos que não estou claro, a Configuração 1 funciona para nós, mas a Configuração 2 não funciona. Note que usamos o recurso Context.xml da Configuração 2 para conectar ao MySQL em nosso código em todo o lugar, e ele funciona muito bem. Quando um Tomcat Realm tenta usá-lo, no entanto, a autenticação sempre falha, mesmo que pareça estar fazendo a mesma coisa que a Configuração 1.
Alguém tem alguma idéia de por que isso pode ser?