【问题标题】:Using MySQL database for authentication in Ja-sig CAS在 Ja-sig CAS 中使用 MySQL 数据库进行身份验证
【发布时间】:2012-10-05 15:38:05
【问题描述】:

我正在尝试将我的 Ja-sig CAS 服务器(在 Tomcat7 上运行的 v3.5)连接到 MySQL 数据库以进行用户身份验证。我基本上在数据库中有一个“用户”表,用于存储我希望 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>

这里是我尝试在 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 部署它时它不起作用。我无法在任何 tomcat 日志中找到任何特别有用的信息。我想知道“commons-dbcp”是否存在问题,因为当我将其注释掉并在 deployerConfigContext.xml 中使用简单的身份验证处理程序时,我就可以部署了。

从我目前的网络研究来看,这方面的文档似乎很少/很差。如果有人有任何好的资源,他们也可以推荐,将不胜感激。

【问题讨论】:

  • “它不起作用”是什么意思? Tomcat 启动了吗?您是否在 Tomcat 日志中收到任何异常消息?您是否安装了所有必需的 jar 文件,例如 commons-dbcp 和 MySQL 客户端 jar?
  • @BrianShowalter 抱歉,我应该更具体一些。 Tomcat 启动得很好,但 CAS 应用程序未能部署。我缺乏线索,因为事实证明我正在查看错误的 tomcat 日志(catalina 而不是 localhost)。在那里我找到了关于为什么它无法部署的更详细的跟踪,这最终导致了我的答案,我在下面更详细地写了。

标签: mysql jdbc cas apache-commons-dbcp jasig


【解决方案1】:

终于在tomcat日志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 安装它消除了我得到的缺失类异常。

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

【讨论】:

    【解决方案2】:

    在 CAS + JDBC 身份验证的官方指南之一 (https://wiki.jasig.org/display/CASUM/Using+JDBC+for+Authentication) 中,他们对此发表了评论:

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

    您的问题可能与 commons-dbcp 的版本有关。就我而言,我的配置与您的配置相似,但在 commons-dbcp 版本上有所不同,我使用的是 1.4(没问题)

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2011-01-12
      相关资源
      最近更新 更多