`
leobluewing
  • 浏览: 240965 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

CAS Shrio 配置登陆的一点心得

    博客分类:
  • sso
 
阅读更多
开始研究sso。

选了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()),
    					[color=red]user.getPassword()[/color], getName());
copy过来的时候没改成ticket。


事后总结思考:事情虽小,但是其实解决过程也搞了两三个小时。不过最终还是理解了CAS和shiro的交互过程,最终在shiro的认证密码其实用的是返回的ticket。

在网上找的一些文章好像都没有着重强调这一点。

“纸上得来终觉浅,绝知此事要躬行”。



分享到:
评论
2 楼 leobluewing 2014-04-29  
sgq0085 写道
楼主你好,我们知道shiro登陆认证的位置是自己实现AuthorizingRealm类的 doGetAuthenticationInfo方法中。
即便是和cas整合,这里应该也是跑不了的。能麻烦楼主把你这个类的实现,或者就这个方法的代码帖上来么?



将原来的方法里的

return new SimpleAuthenticationInfo(principalCollection, ticket); 这个改写掉就行了

其他不用动。我这边直接注释掉了

// create simple authentication info
            //List<Object> principals = CollectionUtils.asList(userId, attributes);
            //PrincipalCollection principalCollection = new SimplePrincipalCollection(principals, getName());
            //return new SimpleAuthenticationInfo(principalCollection, ticket);
            
            /**
             * 替换原有的用户返回
             * */
            User user = userService.findByUserName(userId);
            if (user != null) {
    			return new SimpleAuthenticationInfo(new ShiroUser(user.getId(),
    					user.getUserName(), user.getRealName()),
    					ticket, getName());
    		} else {
    			return null;
    		}
1 楼 sgq0085 2014-04-29  
楼主你好,我们知道shiro登陆认证的位置是自己实现AuthorizingRealm类的 doGetAuthenticationInfo方法中。
即便是和cas整合,这里应该也是跑不了的。能麻烦楼主把你这个类的实现,或者就这个方法的代码帖上来么?

相关推荐

    Cas客户端shiro配置

    1.如果客户端项目采用shiro控制权限 则需要将cas-client 认证过滤交给shiro来管理 2.从shiro下载相应版本的shiro-cas-xxxx. Jar或者在maven里直接添加

    cas +shiro集成

    2. 客户端配置:在应用中,你需要配置Shiro来使用CAS作为其认证机制。这通常涉及配置`CasRealm`,并指定CAS服务器的URL和其他相关参数。 3. SSO登录流程:用户首次访问受保护资源时,会被重定向到CAS服务器进行登录...

    cas+shiro+spring实例

    标题 "cas+shiro+spring实例" 涉及到的是一个集成CAS(Central Authentication Service)和Apache Shiro的Spring应用程序实例。这个实例是专为初学者设计的,旨在帮助他们理解和实现基于CAS的单点登录(Single Sign-...

    cas结合 springmvc shiro 单点登录

    2. **CAS客户端配置**:然后,我们需要在SpringMVC应用中配置CAS客户端,包括设置CasServerUrlPrefix(CAS服务器的URL)、serverName(当前应用的URL)等属性,以便应用能够与CAS服务器通信。 3. **Shiro集成**:接...

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    springmvc+spring+shiro+cas单点登录实例

    然后clean install tomcat7:run 就能跑起来,注意要修改node1和node2里的shiro.properties配置文件,要配置登录成功成功返回的路径 我的访问的分别是: 服务端: http://localhost:8050/cas-server 客户端:...

    cas-shiro-https单点登录实现

    2. 配置SSO客户端:在项目中集成Shiro框架,配置Shiro的CasFilter,指定CAS服务器的地址和相关参数。 3. 配置HTTPS:为服务器申请并配置SSL证书,确保整个SSO过程在安全的HTTPS环境下进行。 4. 测试与调试:验证用户...

    cas+shiro客户端源码

    《CAS+Shiro客户端源码解析与应用》 CAS(Central Authentication Service)是耶鲁大学开发的一款开源的身份验证系统,其主要功能是为Web应用程序提供单一登录(Single Sign-On,SSO)服务。Shiro则是Apache组织的...

    cas-shiro-demo

    - the cas-shiro-demo-app module is a demo web application which uses the CAS Shiro support library with protected area requiring CAS authentication : http://shiro.apache.org/cas.html - the cas-shiro-...

    shiro整合cas3.5

    在 Shiro 应用的 web.xml 中,配置 CAS 的客户端过滤器,以便在用户访问受保护资源时重定向到 CAS 登录页面。 通过以上步骤,Shiro 就能够与 CAS 3.5 进行集成,实现统一的身份验证。用户在访问需要认证的资源时,...

    shiro整合cas的实例

    - 在 Shiro 的配置文件 `shiro.ini` 中,我们需要添加 CAS 相关的配置项。比如,定义 CAS 的服务地址(serviceUrl)、Ticket验证URL(casServerLoginUrl)以及票据验证过滤器(casFilter)。 - 使用 `CasRealm` 类...

    Shiro和cas部分整合

    首先,`context-param` 部分指定了CAS客户端与Shiro的配置文件路径,这里设置为 `classpath*:/cas-client-shiro.xml`。这个配置文件将包含关于CAS服务器的URL、服务验证URL等信息,以及Shiro的 Realm 设置,用于定义...

    cas+shiro+ehcache+srping集成完整代码

    这篇文章将详细讲解如何将CAS(Central Authentication Service)、Shiro(Apache Shiro)和Ehcache集成到Spring应用程序中,提供一个完整的实现流程。这个集成方案主要用于实现统一的身份验证和授权,提升系统的...

    shiro-cas-1.2.1.jar

    3. **配置 Shiro**:在 Shiro 配置文件(如 `shiro.ini` 或 `shiro.xml`)中,你需要指定 CAS 服务器的 URL,以及你的应用如何验证服务票证。这包括 CAS 登录 URL、服务验证 URL 和 CAS 出票 URL。 4. **创建 ...

    springboot+cas5.x+shiro+pac4j实现sso集成

    项目中提供的`shiro-cas-pac4j`可能包含Shiro的配置文件、CasClient的配置及相关的过滤器设置,而`cas`文件可能包含了CAS服务器的相关配置和部署脚本。通过研究这些文件,可以深入理解SSO集成的细节。 总结来说,这...

    单点登录CAS与权限管理框架Shiro集成

    2. **配置ShiroFilter**:在`web.xml`中配置`shiroFilter`,并确保将CAS相关的过滤器(如`casFilter`)添加到Shiro的过滤器链中。 ```xml &lt;filter-name&gt;shiroFilter org.springframework.web.filter....

    springboot shiro pac4j cas jwt认证中心sso完整项目

    本项目基于SpringBoot框架,结合Shiro、pac4j和CAS,构建了一个完整的JWT认证中心,旨在实现高效、安全的SSO解决方案。 1. **SpringBoot**: SpringBoot是Spring框架的一个扩展,它简化了Spring应用的初始搭建以及...

    基于springboot,cas5.3,shiro,pac4j,rest接口获取ticket不再跳转cas server登录页

    1. 配置Spring Boot:首先,我们需要在Spring Boot应用中引入必要的依赖,如CasClient、Shiro和Pac4J的相关依赖。然后,在配置文件中设置CAS服务器的URL和其他相关参数。 2. 集成CAS和Pac4J:在Spring Boot应用中,...

    cas-shiro单点登录

    要集成CAS,我们需要在Shiro配置中添加CasFilter,并配置相关参数,如CAS服务器URL、服务验证URL等。 3. **Ticket验证**:当用户访问受保护资源时,Shiro会重定向到CAS服务器进行身份验证。如果用户已登录,CAS...

Global site tag (gtag.js) - Google Analytics