先列出版本号:

  服务端版本:cas server 4.0.0

  客户端版本:cas client 3.3.3

   cas server

   step1:先将primaryPrincipalResolver bean属性attributeRepository注释,因为cas 默认是通过配置xml来获取多用户信息的。

 <bean id="primaryPrincipalResolver"
class="org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver" >
<!--<property name="attributeRepository" ref="attributeRepository" />-->
</bean>

   step2:自定义获取多用户信息类,此类继承PrincipalResolver,重写resolve和supports,另附代码如下:

    @Autowired
private J1DBService dbService; @Override
public Principal resolve(Credential credential) {
// TODO Auto-generated method stub
final UsernamePasswordCredential usernamePasswordCredentials = (UsernamePasswordCredential) credential;
String userStr = "";
try {
String username = usernamePasswordCredentials.getUsername();
String password = usernamePasswordCredentials.getPassword();
password = MD5.getMD5(password);
User r = new User();
r.setUserName(username);
r.setPassword(password);
Map<String,Object> m = dbService.getUser(r);
if (null!=m) {
r.setUserId(Integer.parseInt(m.get("userId").toString()));
r.setUserRealName(m.get("userRealName")==null?null:m.get("userRealName").toString());
}
userStr = JSON.toJSONString(r);
userStr = Base64.getBase64(userStr);
} catch (Exception e) {
e.printStackTrace();
}
return new SimplePrincipal(userStr, null);
}
/**
* @Description(功能描述) : 确定一个凭证类型支持这个解析器
* @author(作者) : hhl
* @date (开发日期) : 2015年3月16日 下午15:17:25
* @param credentials : 确定一个凭证类型支持这个解析器
* @return boolean : 返回true,支持这些凭证,否则假。
*/
@Override
public boolean supports(Credential credential) {
// TODO Auto-generated method stub
return credential != null && UsernamePasswordCredential.class.isAssignableFrom(credential.getClass());
}

  由于返回给客户端用户信息中存在中文,所以进行了Base64加密。

  step3:将primaryPrincipalResolver bean映射的类路径变更为你自定义的类。

 <bean id="primaryPrincipalResolver"
class="xx.xx.xx" >
<!--<property name="attributeRepository" ref="attributeRepository" />-->
</bean>

  cas client

  如在class中:

/**
* 从中央授权服务器获取得到用户信息
* @param request
*/
@RequestMapping(value="/sysuser/saveUserIntoSession")
@ResponseBody
public String saveUserInfoIntoSession(HttpServletRequest request){
Assertion assertion = (Assertion)request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
String json=null;
if (null!=assertion) {
AttributePrincipal principal = assertion.getPrincipal();
String userStr=principal.getName();
userStr = Base64.getFromBase64(userStr);
User u = JSON.parseObject(userStr, User.class);
String tokenId = UUID.randomUUID().toString();
request.getSession().setAttribute("password",u.getPassword());
request.getSession().setAttribute("userName",u.getUserName());
request.getSession().setAttribute("realName",u.getUserRealName());
SysUser e = systemService.getUser(u.getUserName());
//取得用户的角色id
String roleId = getUserRoleById(e.getUserId());
request.getSession().setAttribute("userId",e.getUserId());
request.getSession().setAttribute("tokenId",tokenId);
request.getSession().setAttribute("roleId",roleId); LoginBto b = new LoginBto();
b.setPassword(u.getPassword());
b.setRealName(u.getUserRealName());
b.setRoleId(roleId);
b.setTokenId(tokenId);
b.setUserId(e.getUserId());
b.setUserName(u.getUserName());
json = JSON.toJSONString(b);
}
return json;
}

  如在jsp中:

<%@ page import="org.jasig.cas.client.validation.Assertion" %>
<%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %>
<%@ page import="org.jasig.cas.client.util.AbstractCasFilter" %>
<%@ page import="com.founder.ec.sso.model.User" %>
<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page import="com.founder.ec.sso.util.Base64" %>
<%@ page import="java.util.UUID" %>
<span style="float: right; padding-right: 20px; margin-top: 10px;" class="head">
<% Assertion assertion = (Assertion)request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
String userName = null;
String realName = null;
String flag = null;
if(null!=assertion){
AttributePrincipal principal = assertion.getPrincipal();
String userStr=principal.getName();
userStr = Base64.getFromBase64(userStr);
User u = JSON.parseObject(userStr, User.class);
userName = u.getUserName();
realName = u.getUserRealName();
flag = "cas";
}
%>
<% if(null!=flag){ %>
欢迎&nbsp;&nbsp;<%=realName %>(<%=userName %>)&nbsp;&nbsp;
<% }%>
<% if(null==flag){ %>
欢迎&nbsp;&nbsp;${sessionScope.realName}(${sessionScope.userName})&nbsp;&nbsp;
<% }%>
<a href="javascript:void(0)" id="editpass" style="color: #000"> 修改密码</a>&nbsp;
<a href="http://192.168.2.11:8080/cas/logout?service=http://101.test.com/" style="color: #000">注销登录</a>&nbsp;
<!-- <a href="javascript:void(0)" id="loginOut" style="color:#000 ">注销登录</a>&nbsp; -->
<a href="javascript:void(0)" id="colNorth"><img border="0" style="margin-bottom: 0px" src="${ctx }/images/system/icon/detail-collapse.png" /></a>
<a href="javascript:void(0)" id="newWindow"><img border="0" style="margin-bottom: 0px" src="${ctx }/images/common/fullscreen.gif" /></a>
</span>

  

CAS实战の获取多用户信息的更多相关文章

  1. CAS实战の简介

    一.SSO简介 单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用:而不需要访问每个应用时,都重新输入密码.IB ...

  2. CAS实战の自定义登录

    由于每个版本的改动较大,所以先把版本号列出: 服务端版本:cas server 4.0.0 客户端版本:cas client 3.3.3 一.自定义登录页面 页面路径:/WebContent/WEB- ...

  3. python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式

    一.项目目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式 二.确定页面内容 爬虫地址:https://movie.douban.co ...

  4. CAS实战の遇到的问题

    1.客户端启动报错,报错信息如下: 严重: Exception starting filter CAS Single Sign Out Filter java.lang.IllegalArgument ...

  5. selenium&phantom实战--获取代理数据

    获取快代理网站的数据 注意: #!/usr/bin/env python # _*_ coding: utf-8 _*_ # __author__ ='kong' # 导入模块 from seleni ...

  6. CAS实战のclient自定义过滤器

    我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...

  7. CAS实战の自定义注销

    步骤一 在cas server端,设置/WebContent/WEB-INF/cas-servlet.xml: <bean id="logoutAction" class=& ...

  8. [原]基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息

    从cas server登录成功后,默认只能从casclient得到用户名.但程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息的情况. cas client拿到用户名后再到数据库中查 ...

  9. CAS机制详解

    目录 1. 定义 2. 实现原理 3. 无版本号CAS实战说明 4. CAS机制在Java中的应用 5. CAS的缺点 1. CPU开销过大 2. 不能保证代码块的原子性 3. ABA问题 6. JA ...

随机推荐

  1. JAVA面向对象编程课程设计——项目部署

    目录 一.Java环境的安装 1.下载 2.安装 3.配置环境变量 二.Tomcat的安装 1.下载 2.安装 3.启动Tomcat(默认已经安装好java环境,如果未安装java会报错.) 三.My ...

  2. 6.5笔记-DQL高级查询

    一.高级查询 Exists Drop table if exists result; 子查询有返回结果: EXISTS子查询结果为TRUE 子查询无返回结果: EXISTS子查询结果为FALSE, 外 ...

  3. JDK、Spring、Quartz等几种不同定时器的用法,以及cronExpression表达式定义

    referenc:https://blog.csdn.net/clementad/article/details/42042111 下面介绍几种常用的定时器及其实现方法: 第一种:Timer和Time ...

  4. Linux内核优化(未注释)

    Nginx代理服务内核优化 # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disab ...

  5. 云计算与虚拟化KVM深度实践

    徐亮伟, 江湖人称标杆徐.多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作.擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作. 个人博客"徐亮伟架构师之路&quo ...

  6. phpstudy操作sql server相关经验

    1.去官网http://www.phpstudy.net/下载并安装phpstudy 2.修改php.ini配置文件如下: mssql.secure_connection = onextension= ...

  7. OpenCL 第一个计算程序,两向量之和

    ▶ 一个完整的两向量加和的过程,包括查询平台.查询设备.创建山下文.创建命令队列.编译程序.创建内核.设置内核参数.执行内核.数据拷贝等. ● C 代码 #include <stdio.h> ...

  8. c++ new 与malloc有什么区别

    前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题.当时我回答new从自由存储区上分配内存,malloc从堆上分配内存:new/de ...

  9. pom指定java编译版本和编码

    方法一 <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-8</project ...

  10. Tomcat 实战-调优方案

    来自:  http://blog.csdn.net/u010028869/article/details/51793821 来自:  https://www.cnblogs.com/baihuites ...