浏览 4706 次
锁定老帖子 主题:CAS Shrio 配置登陆的一点心得
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-04-24
最后修改:2014-04-24
选了CAS,毕竟老牌开源sso工具,网上查了下据说80%的sso技术都是基于cas。 其他东西不说了,什么ssl,cas server部署什么的,网上都很多,也都写的很好。 这里仅记录一点自己实现中比较细的地方。 shiro里面一般在做 AuthenticationInfo的时候返回的info里面的principals一般都不会是简单的string(用户名),应该都是自己包装过的User对象。 我这边的demo系统也不例外。这次搭sso demo之前先弄了最简单的两个app实验,就是只有最简单的一个jsp页面,通过配置web.xml来做,一小时就搞定了,的确是很方便。 但是在shiro整合中发现在server认证通过后跳回原系统就报错。 整个CAS的认证过程已经到了第6步,认证服务器已经给client返回了用户名,所以这个错误应该和server没关系,是cilent本身的问题。 设断点跟踪后发现是token和生成的info不能匹配导致出问题。在不用CAS的情况下一般就是指输入的密码出错导致的。 顿时莫名其妙,认证都不在client进行了居然还会有这种错误。 后来发现是用的自定义的principals对象在copy代码过程中忘记改了。。。 在CasRealm标准实现中,credentials用的是ticket return new SimpleAuthenticationInfo(principalCollection, ticket); 结果在我自己改写的过程中 return new SimpleAuthenticationInfo(new ShiroUser(user.getId(), user.getUserName(), user.getRealName()), user.getPassword(), getName()); copy过来的时候没改成ticket。 事后总结思考:事情虽小,但是其实解决过程也搞了两三个小时。不过最终还是理解了CAS和shiro的交互过程,最终在shiro的认证密码其实用的是返回的ticket。 在网上找的一些文章好像都没有着重强调这一点。 “纸上得来终觉浅,绝知此事要躬行”。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-04-29
有些没说清楚啊,能麻烦把继承AuthorizingRealm类的 doGetAuthenticationInfo方法实现全部贴上来么?
|
|
返回顶楼 | |