欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CAS实战(cas-server-3.3.4 + cas-client-3.1.3)九 博客分类: CAS cas-server-3.3.4 + cas-client-3.1.3

程序员文章站 2024-02-13 12:26:34
...

配置还有使用spring的方式,这里就不列出了,如果大家有兴趣,可以参考官方资料

至此,子系统已经接入CAS,当访问子系统的时候,如果没有经过认证,将会跳转到CAS服务器,登录后会自动返回到子系统,当然,这样做并没有实现单点登陆,因为子系统还没有设为登录状态.

单点登陆的实现

CAS服务端在认证通过后,会把当前认证通过的登陆用户名传递到子系统,当然,认证通过的用户名有可能与子系统的用户名不一样,那子系统就需要一个认证通过的用户名与子系统用户的映射,在子系统拿到通过认证的用户名,再找到对应的子系统用户,然后把该用户设为登陆状态,这样才真正实现了单点登陆.

 

2.x版本client获取CAS传递过来的用户名的方法:

CAS 在登录成功过后,会给浏览器回传 Cookie,设置新的到的 Service Ticket。但客户端应用拥有各自的 Session,我们要怎么在各个应用中获取当前登录用户的用户名呢?CAS Client Filter 已经做好了处理,在登录成功后,就可以直接从 Session 的属性中获取

Java 中通过 Session 获取登录用户名

               

// 以下两者都可以

session.getAttribute(CASFilter.CAS_FILTER_USER);

session.getAttribute("edu.yale.its.tp.cas.client.filter.user");

通过 JSTL 获取登录用户名

               

<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>

通过 CASFilterRequestWrapper 获取登录用户名

               

CASFilterRequestWrapper  reqWrapper=new CASFilterRequestWrapper(request);

out.println("The logon user:" + reqWrapper.getRemoteUser());

 

 

3.1.3版本client获取CAS传递过来的用户名的方法

客户端获取登录用户名和用户信息实例

HttpServletRequest request = ServletActionContext.getRequest();   

AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();   

String username = principal.getName();   

Long orgnId = Long.parseLong(principal.getAttributes().get("orgnId").toString());