Using MySQL database for authentication in Ja-sig CAS

I'm trying to hook my Ja-sig CAS server (v3.5 running on Tomcat7) up to a MySQL database for user authentication. I basically have a table 'users' in the database storing username/password pairs that I want CAS to check against. However, I'm having difficulty even getting my current configuration to deploy.

This is an excerpt from pom.xml as it relates to database connectivity:

<dependency>
   <groupId>org.jasig.cas</groupId>
   <artifactId>cas-server-support-jdbc</artifactId>
   <version>${cas.version}</version>
</dependency>

<dependency>
   <groupId>commons-dbcp</groupId>
   <artifactId>commons-dbcp</artifactId>
   <version>1.4</version>
   <scope>runtime</scope>
</dependency>

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.22-bin</version>
   <scope>provided</scope>
</dependency>

And here is where I try to setup the database connection in WEB-INF/deployerConfigContext.xml:

<bean
class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
   <property name="tableUsers">
       <value>users</value>
   </property>
   <property name="fieldUser">
       <value>username</value>
   </property>
   <property name="fieldPassword">
       <value>password</value>
   </property>
   <property name="passwordEncoder">
       <bean
             class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
        <constructor-arg value="MD5" />
       </bean>
   </property>
   <property name="dataSource" ref="dataSource" />
</bean>

<bean id="datasource"
      class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:mysql://localhost:3306/cas_db</value>
    </property>
    <property name="username">
        <value>cas_server</value>
    </property>
    <property name="password">
        <value>pass</value>
    </property>
</bean>

Он прекрасно работает с Maven, но когда я пытаюсь развернуть его с Tomcat, он не работает. Я не смог найти ничего особенно информативного ни в одном из журналов котов. Мне интересно, может ли быть проблема с 'commons-dbcp', поскольку, когда я закомментирую это и использую простой обработчик аутентификации в deployerConfigContext.xml, я могу развернуть.

Похоже, что в моем текущем веб-исследовании есть небольшая / плохая документация об этом. Если у кого-то есть хорошие ресурсы, которые они также могут порекомендовать, это будет с благодарностью.

2 ответа

Решение

Наконец-то я нашел след ошибок в журнале кота localhost.YYYY-MM-DD.log. Как оказалось, мне нужно было добавить commons-pool:

<dependency>
   <groupId>commons-pool</groupId>
   <artifactId>commons-pool</artifactId>
   <version>1.6</version>
   <scope>provided</scope>
</dependency>

от которого зависит commons-dbcp. Установка этого с Maven покончила с отсутствующим исключением класса, которое я получал.

Следующая проблема заключалась в том, что я ошибочно определил свой bean-компонент источника данных в списке authenticHandlers в deployerConfigContext.xml, что привело к исключению преобразования типа. Удаление боба из тега списка сделало свое дело.

В одном из официальных руководств по аутентификации CAS + JDBC ( https://wiki.jasig.org/display/CASUM/Using+JDBC+for+Authentication) они комментируют это:

Примечание. Рекомендуется использовать commons-dbcp 1.2.1 с MySQL вместо более новой версии. Я обнаружил, что новая версия (1.2.2) вызовет ошибку записи Socket в MySQL после того, как ваш CAS простаивает более 8 часов, то есть время, когда MySQL будет очищать все незанятые соединения.

Ваша проблема может быть связана с версией commons-dbcp. В моем случае, у меня есть конфигурация, аналогичная вашей, с разницей в версии commons-dbcp, я использую 1.4 (без проблем)

Другие вопросы по тегам