论坛首页 Java企业应用论坛

CAS实战(cas-server-3.3.4 + cas-client-3.1.3)九

浏览 3266 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-12-03  

配置还有使用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());  

 

 

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics