Tomcat JDBC vs. DataSource Realm
Dla aplikacji internetowejtestapp
który zawiera następujące elementy w swoim pliku web.xml (między innymi)
<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>
Rozważmy następujące dwie konfiguracje Tomcat Realm:
Konfiguracja 1 - obszar JDBC:
W.../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"
/>
Konfiguracja 2 - DataSource Realm:
W.../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"
/>
I w.../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"/>
Z powodów, dla których nie jestem pewien, konfiguracja 1 działa dla nas, ale konfiguracja 2 nie. Zauważ, że używamy zasobu Context.xml z konfiguracji 2, aby połączyć się z MySQL w naszym kodzie w dowolnym miejscu i działa świetnie. Jednak gdy tomcat Realm próbuje go użyć, uwierzytelnianie zawsze kończy się niepowodzeniem, chociaż wydaje się, że robi to samo co konfiguracja 1.
Czy ktoś ma jakieś pojęcie o tym, dlaczego może to być?