CAS实战の获取多用户信息
先列出版本号:
服务端版本: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){ %>
欢迎 <%=realName %>(<%=userName %>)
<% }%>
<% if(null==flag){ %>
欢迎 ${sessionScope.realName}(${sessionScope.userName})
<% }%>
<a href="javascript:void(0)" id="editpass" style="color: #000"> 修改密码</a>
<a href="http://192.168.2.11:8080/cas/logout?service=http://101.test.com/" style="color: #000">注销登录</a>
<!-- <a href="javascript:void(0)" id="loginOut" style="color:#000 ">注销登录</a> -->
<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实战の获取多用户信息的更多相关文章
- CAS实战の简介
一.SSO简介 单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用:而不需要访问每个应用时,都重新输入密码.IB ...
- CAS实战の自定义登录
由于每个版本的改动较大,所以先把版本号列出: 服务端版本:cas server 4.0.0 客户端版本:cas client 3.3.3 一.自定义登录页面 页面路径:/WebContent/WEB- ...
- python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
一.项目目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式 二.确定页面内容 爬虫地址:https://movie.douban.co ...
- CAS实战の遇到的问题
1.客户端启动报错,报错信息如下: 严重: Exception starting filter CAS Single Sign Out Filter java.lang.IllegalArgument ...
- selenium&phantom实战--获取代理数据
获取快代理网站的数据 注意: #!/usr/bin/env python # _*_ coding: utf-8 _*_ # __author__ ='kong' # 导入模块 from seleni ...
- CAS实战のclient自定义过滤器
我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...
- CAS实战の自定义注销
步骤一 在cas server端,设置/WebContent/WEB-INF/cas-servlet.xml: <bean id="logoutAction" class=& ...
- [原]基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
从cas server登录成功后,默认只能从casclient得到用户名.但程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息的情况. cas client拿到用户名后再到数据库中查 ...
- CAS机制详解
目录 1. 定义 2. 实现原理 3. 无版本号CAS实战说明 4. CAS机制在Java中的应用 5. CAS的缺点 1. CPU开销过大 2. 不能保证代码块的原子性 3. ABA问题 6. JA ...
随机推荐
- vim自定义配置之nerdTree
vimConfig/plugin/nerdTree-setting.vim let g:NERDTree_title="[NERDTree]" nmap <F2> :N ...
- CFGym 101490J 题解
一.题目链接 http://codeforces.com/gym/101490 二.题面 三.题意 给你n个点,代表学生所在位置,n个点,代表老师所在位置.每个学生分配一个老师.让你找出一个最小的学生 ...
- 给iOS开发新手送点福利,简述UISlide的属性和用法
UISlide属性 1. minimumValue : 当值可以改变时,滑块可以滑动到最小位置的值,默认为0.0 _slider.minimumValue = 10.0; 2. maximu ...
- tensorflow-eagerAPI
调用该API可以不通过 tensorflow.Session.run()调用 定义的张量constant tensor,可以直接print # -*- coding: utf-8 -*- from _ ...
- django-DIL模板自定义过滤器,自定义标签,自定义包含标签
自定义过滤器 DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求.因此django提供了一个接口,让开发者能自定义标签和过滤器. 首先,你需要添加一个t ...
- uva-110-没有for循环的排序
题意:看输出就懂了,暴力枚举题,字符串最大长度是8,所有长度等于8的长度是8!=1x2x3x4x5x6x7x8=40320,数据量比较小的.只是枚举的方向比较怪异,如下,长度等于3的串 a ab,ba ...
- jeesite快速开发平台(一)----简介
转自:https://blog.csdn.net/u011781521/article/details/54880170
- JPA with Hibernate implementation
https://code.google.com/p/jpa-basics-tutorial/source/checkout http://alextretyakov.blogspot.com/2013 ...
- java 序列化时排除指定属性
java 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2- ...
- 分享 - 普通程序员如何转向AI方向
原作者:计算机的潜意识 原文链接,内容稍有改动,侵删 1. 目的2. AI领域简介3. 学习方法4. 学习路线 0) 领域了解1) 知识准备2) 机器学习3) 实践做项目4) 深度学习5) 继续机器学 ...