先列出版本号:

  服务端版本: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. Eclipse中配置Maven build打包

    Eclipse中配置Maven build打包 clean package

  2. J.U.C 整体认识

    深入浅出 Java Concurrency (1) : J.U.C的整体认识 去年年底有一个Guice的研究计划,可惜由于工作“繁忙”加上实际工作中没有用上导致“无疾而终”,最终只是完成了Guice的 ...

  3. 20165233 Java第一章学习总结

    20165233 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一章 Java特点:语法简单.面向对象.与平台无关.动态. 字节码不能被任何平台直接识别. ...

  4. Django学习---原生ajax

    Ajax 原生ajax Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件). ...

  5. TMS Grid

    TMS Grid http://edn.embarcadero.com/article/42553

  6. Docker dockerfile-maven-plugin 使用

    https://blog.csdn.net/liubingyu12345/article/details/79015966 背景: 环境阿里云CentOs7下面Docker部署Spring boot ...

  7. 如何用MaskBlt实现两个位图的合并,从而实现背景透明

    我有两个位图,一个前景图,一个背景图(mask用途).请问如何用MaskBlt实现两个位图的合并,从而实现背景透明! 核心代码:dcImage.SetBkColor(crColour);dcMask. ...

  8. Mybatis自动生成xml文件、dao接口、实体类

    Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...

  9. Python_06-函数与模块

    1.获取当前路径 >>> import os >>> os.path() >>> os.getcwd() 'D:\\Python34' os.pa ...

  10. Linux下patch的制作和应用

    转自:http://blog.chinaunix.net/u3/100239/showart_1984963.html 首先介绍一下diff和patch.在这里不会把man在线文档上所有的选项都介绍一 ...