单点登录2

减肥啊啊啊啊啊 2012-10-12 11:49:38


参照了一个前人写的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就想走自己的数据库。


...全文
257 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
数据库名是 localhost:3306/t_test
[/Quote]

修正: localhost:3306/test/ 表是t_test 字段为id username password 三个、
a3899378 2012-10-12
  • 打赏
  • 举报
回复
我去。。。 看了半天。。
wei2253498 2012-10-12
  • 打赏
  • 举报
回复
恭喜楼主了,。,,自己解决了!!!!!!
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

哈哈,来迟了,还抢到分不

去掉不太好吧,因为你数据库的密码不可能以明文存储的

看下QueryDatabaseAuthenticationHandler的实现
Java code

final String username = getPrincipalNameTransformer().transform(credentials.getUsername());//……
[/Quote]

嗯嗯 不过是测试、我就觉得肯定走数据库了、不过总是提示登录凭证错误、以为是数据库问题、
看来人家多加md5加密了、

呵呵 谢谢您讲解源码、

有三人来拿分就结贴了、
swoky 2012-10-12
  • 打赏
  • 举报
回复
哈哈,来迟了,还抢到分不

去掉不太好吧,因为你数据库的密码不可能以明文存储的 

看下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;
}
  • 打赏
  • 举报
回复


好吧、我二死了、

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



散分来拿吧、
  • 打赏
  • 举报
回复
=============================================================
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
=============================================================


这是登录时后台打印的数据、

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧