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

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值