在Ja-sig-CAS中使用MySQL数据库进行身份验证

在Ja-sig-CAS中使用MySQL数据库进行身份验证,mysql,jdbc,cas,apache-commons-dbcp,jasig,Mysql,Jdbc,Cas,Apache Commons Dbcp,Jasig,我正试图将我的Ja-sig-CAS服务器(在Tomcat7上运行的v3.5)连接到一个MySQL数据库以进行用户身份验证。我基本上在数据库中有一个“users”表,存储我希望CAS检查的用户名/密码对。然而,我甚至很难部署我的当前配置 这是pom.xml的摘录,因为它与数据库连接有关: <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support

我正试图将我的Ja-sig-CAS服务器(在Tomcat7上运行的v3.5)连接到一个MySQL数据库以进行用户身份验证。我基本上在数据库中有一个“users”表,存储我希望CAS检查的用户名/密码对。然而,我甚至很难部署我的当前配置

这是pom.xml的摘录,因为它与数据库连接有关:

<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>

org.jasig.cas
cas服务器支持jdbc
${cas.version}
公共dbcp
公共dbcp
1.4
运行时
mysql
mysql连接器java
5.1.22-bin
假如
下面是我尝试在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>

使用者
用户名
密码
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/cas_db
cas_服务器
通过
它在Maven中构建得非常好,但是当我尝试在Tomcat中部署它时,它不起作用。我在任何tomcat日志中都找不到任何特别有用的信息。我想知道“commons dbcp”是否有问题,因为当我注释掉它并在deployerConfigContext.xml中使用一个简单的身份验证处理程序时,我就能够部署了


从我目前的网络研究中,似乎很少/很差地记录了这一点。如果有人也能推荐一些好的资源,我们将不胜感激。

我终于在tomcat日志localhost.yyy-MM-DD.log中找到了错误的痕迹。事实证明,我需要添加commons池:

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

共用池
共用池
1.6
假如
公共dbcp依赖于哪个。用Maven安装它消除了我遇到的缺少类异常


我的下一个问题是,我在deployerConfigContext.xml中的AuthenticationHandler列表中错误地定义了数据源bean,这导致了类型转换异常。将bean从列表标记中移出就成功了。

在CAS+JDBC身份验证()的一个官方指南上,他们评论说:

注意:建议将commons dbcp 1.2.1与MySQL一起使用,而不是更新版本。我发现新版本(1.2.2)会在MySQL中导致套接字写入错误,当您的CAS空闲超过8小时后,MySQL将清除所有空闲连接


您的问题可能与commons dbcp的版本有关。在我的例子中,我有一个与您类似的配置,与commons dbcp版本不同,我使用的是1.4(没有问题)

您所说的“它不工作”是什么意思?Tomcat启动了吗?您在Tomcat日志中是否收到任何异常消息?您是否安装了所有必要的jar文件,例如commons dbcp和MySQL客户端jar?@Brianshow尽管我很抱歉,但我应该更具体一些。Tomcat启动得很好,但CAS应用程序未能部署。我缺少线索,因为我查错了tomcat日志(catalina而不是localhost)。在那里,我找到了一条更详细的线索,解释了为什么它无法部署,这最终导致了我的答案,我在下面写了更详细的答案。