参照了一个前人写的cas demo、
很不错 很仔细(http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html)配置好了cas  、(什么证书啊、 cas 的server 加jar包啦、)
但是就是不走自己的配置查询、根据自己本地的数据库去查询用户名和密码、数据库名是 localhost:3306/t_test  
数据库表就俩数据库 :username -  password 
账户-密码: 123123-123123  和 admin-123456 
两个账户全试过了、配置自己的QueryDatabaseAuthenticationHandler和datasrouce
<!-- 源文件是判断账户和密码相同就通过 故注释掉 
<bean 
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

-->

<!--  自己添加的bean  -->
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource"></property>
<property name="sql" value="select `password` from t_test where `username` = ? "></property>
<property name="passwordEncoder" ref="MD5PasswordEncoder"></property>
</bean>
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
   <!--  jdbc url  原demo是jdbc:mysql:\\\test  我不管改这样还是下面的都没登录成功  -->
   <property name="url"><value>jdbc:mysql://127.0.0.1:3306/test</value></property>
   <property name="username"><value>root</value></property>
   <property name="password"><value>boyuboyu</value></property>
  </bean>
 
  <bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
      <constructor-arg index="0">
        <value>MD5</value>
  </constructor-arg>
  </bean>
用户登录的时候总是数据库不对、(原官方demo是 密码和账户一样就会登录成功。。我现在改的是走自己的数据库查询)没报错误、(当我故意改表名或者列名查询的时候  后台就会报错误的、根据错误 也确认他是查询了我自己的数据库、)
现在问题就是想让cas就想走自己的数据库。

解决方案 »

  1.   


    修正:  localhost:3306/test/     表是t_test     字段为id  username password  三个、
      

  2.   

    =============================================================
    WHO: [username: 123123]
    WHAT: supplied credentials: [username: 123123]
    ACTION: AUTHENTICATION_FAILED
    APPLICATION: CAS
    WHEN: Fri Oct 12 13:03:55 CST 2012
    CLIENT IP ADDRESS: 127.0.0.1
    SERVER IP ADDRESS: 127.0.0.1
    =============================================================>
    2012-10-12 13:03:55,934 INFO [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
    =============================================================
    WHO: [username: 123123]
    WHAT: error.authentication.credentials.bad
    ACTION: TICKET_GRANTING_TICKET_NOT_CREATED
    APPLICATION: CAS
    WHEN: Fri Oct 12 13:03:55 CST 2012
    CLIENT IP ADDRESS: 127.0.0.1
    SERVER IP ADDRESS: 127.0.0.1
    =============================================================这是登录时后台打印的数据、
      

  3.   

    好吧、我二死了、把md5去掉就可以登录了、搞了半天数据库智商、治伤了、
     
     去掉依赖属性和md5的bean就好了、<property name="passwordEncoder" ref="MD5PasswordEncoder"></property>
          
         
    <bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
          <constructor-arg index="0">
            <value>MD5</value>
          </constructor-arg>
      </bean>
    散分来拿吧、
      

  4.   

    哈哈,来迟了,还抢到分不去掉不太好吧,因为你数据库的密码不可能以明文存储的 看下QueryDatabaseAuthenticationHandler的实现        final String username = getPrincipalNameTransformer().transform(credentials.getUsername());//拿到用户名123123
            final String password = credentials.getPassword();//拿到用户名123123
            final String encryptedPassword = this.getPasswordEncoder().encode(
                password);//将密码进行加密,结果形如:e834jf84jf84j8g...... 
            
            try {
                final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);//根据你的SQL取得数据库中的密码为:123123
                return dbPassword.equals(encryptedPassword);//用加密后的字符串和123123进行比较???,肯定不会正确
            } catch (final IncorrectResultSizeDataAccessException e) {
                // this means the username was not found.
                return false;
            }