CAS 单点登录 服务器整合
概述
现在企业内部的系统越来越多,如果各个应用都有自己的用户系统,那么用户将不得不要记住不同系统的用户名密码,因此独立的用户系统应运而生,各个系统之间通过单点登录的方式,这样内部只需要记住一个用户名和密码,就可以自由的访问有权限的系统。
单点登录的实现
1.我们采用cas server 实现单点登录,下载地址是:
http://developer.jasig.org/cas/cas-server-4.0.0-release.zip
2.CAS 配置修改
将包解压,我们可以看到如下目录
将war 文件进行解压。
1.去掉https验证。
CAS 默认认证方式使用的是HTTPS协议,一般对安全性不高的话建议取消改成HTTP方式。因为,开启的话会经常提示证书过期、需要用户确认等,对客户的感知不好,当前有需要的可以开启。
打开 cas-server\WEB-INF\deployerConfigContext.xml 文件 ,找到如下配置:
<bean id="proxyAuthenticationHandler"class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient" />
改成:
<bean id="proxyAuthenticationHandler"class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient" p:requireSecure="false" />
打开 cas-server\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml ,找到如下配置:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />
改成:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="false"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />
打开 cas-server\WEB-INF\spring-configuration\warnCookieGenerator.xml ,找到如下配置
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASPRIVACY"p:cookiePath="/cas" />
改成
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="false"p:cookieMaxAge="-1"p:cookieName="CASPRIVACY"p:cookiePath="/cas" />
2.修改成数据库验证用户
在默认情况下,cas使用了固定用户进行登录,我们需要改成数据库用户的验证。
我们目前产品中使用了多租户的SAAS模式,因此用户名 为 帐号加 域名的形式 如 admin@mycine.cn
我们做如下修改:
1.在 WEB-INF 增加 数据库连接池的jar和 mysql驱动的jar包。
mysql-connector-java-5.1.34.jar
druid-1.0.26.jar
2.打开配置文件
WEB-INF/deployerConfigContext.xml
增加数据源配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本属性 url、user、password --><property name="name" value="系统数据源" /><property name="url" value="${db.url}" /><property name="username" value="${db.username}" /><property name="password" value="${db.password}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${db.minimumConnectionCount}" /><property name="minIdle" value="${db.minimumConnectionCount}" /> <property name="maxActive" value="${db.maximumConnectionCount}" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="SELECT 1" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /><!-- 配置监控统计拦截的filters --><property name="filters" value="stat" /> </bean>
修改验证方式:
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="dataSource" ref="dataSource" /><property name="sql" value="select pwd_ from sys_account where name_ = ? and domain_=?" /><property name="passwordEncoder" ref="passwordEncoder"></property></bean>
这里SQL 我们自己定义。
修改密码加密方式
<bean id="passwordEncoder" class="com.redxun.cas.MyPasswordEncoder"></bean>
修改成 sha256的方式进行hash。
import java.security.MessageDigest;import org.apache.commons.codec.binary.Base64; import org.jasig.cas.authentication.handler.PasswordEncoder;public class MyPasswordEncoder implements PasswordEncoder {@Overridepublic String encode(String pwd) {String encPwd=encryptSha256(pwd);return encPwd;}private String encryptSha256(String inputStr) {try {MessageDigest md = MessageDigest.getInstance("SHA-256");byte digest[] = md.digest(inputStr.getBytes("UTF-8"));return new String(Base64.encodeBase64(digest));} catch (Exception e) {return null;}} }
修改QueryDatabaseAuthenticationHandler代码。
红框部分是修改的地方。
增加属性配置:
修改 WEB-INF/cas.properties 文件
增加配置如下:
db.url=jdbc:mysql://localhost:3306/mycine?useUnicode=true&characterEncoding=utf-8 db.username=root db.password=rootdb.minimumConnectionCount=10 db.maximumConnectionCount=20
这样cas 就支持使用数据库进行用户验证了。
转载于:https://www.cnblogs.com/yg_zhang/p/8693806.html
CAS 单点登录 服务器整合相关推荐
- 【实战】从零搭建SSO单点登录服务器 - CAS认证流程
前言 因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录.这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录.注销. 写这个系列的文章有两个目的: 记录自 ...
- 爆破专栏丨Spring Security系列教程之实现CAS单点登录上篇-概述
作者:千锋一一哥 前言 从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案.开源项目,但 ...
- CAS单点登录框架使用
CAS单点登录框架使用 CAS Server 1.GitHub上下载项目 https://github.com/apereo/cas-overlay-template/tree/5.3 5.3之后的都 ...
- CAS单点登录系统的实现
CAS单点登录系统的实现 前言 一.CAS思路 二.代码实现 环境准备 代码实现 2.1 MTV系统前端判断是否登录,依据前端cookie是否存在用户信息 2.2 MTV系统前端判断链接是否携带临时票 ...
- CAS单点登录原理解析及相关配置
1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中 ...
- java培训爆破专栏之Spring Security系列教程之实现CAS单点登录上篇-概述
作者:千锋一一哥 前言 从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案.开源项目,但 ...
- cas单点登录-https的配置(一)
前言 由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...
- cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?
展开全部 CAS 原理和协议 从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client.CAS Server 需要独立部署,主要负责62616964757a686964616 ...
- CAS 单点登录/登出 系统
前言: 在我们的实际开发中,更多的是采用分布式系统.那么问题来了,对于分布式系统的登录问题,我们如何解决呢? 如果说我们在每一个系统中都要进行一次登录,那么用户体验度也就差的没法用了.以京东商城为例, ...
最新文章
- Word中新建样式/修改样式对话框中的各个选项意义
- python3和2的区别大吗_python3和2为什么区别大吗
- ORB-SLAM2 学习1
- 算法学习(四)冒泡排序
- idea快速生成SpringBoot项目无法启动问题
- Atitit.软件硕士 博士课程 一览表 attilax 总结
- 这款机器人也想体验双十一!
- 关闭Linux 内存地址随机化机制
- php larvel4.2,Laravel 4.2参考手册 pdf
- vscode :code runner运行include多个文件的cpp
- js高级第三天(原型链及继承)
- 8位处理器、16位处理器、32位处理器和64位处理器
- 历练熟女给老实木讷男孩的恋爱建议(转贴)
- java释放资源_JAVA 手动释放资源问题
- 中国最实用的十大网站
- 获取文件夹中所有文件清单
- 大麦网首开客户分享会:没有吃喝 纯聊天
- 深度学习框架tensorflow学习与应用6(防止过拟合dropout,keep_prob =tf.placeholder(tf.float32))
- 老夫整理的1000行MySQL学习笔记传授有缘人
- “高效的隐私保护的张量分解方法研究”学习笔记(上)
热门文章
- c++网络通信(与服务器通信聊天)和c#网络通信
- 让Windows Server 2008+IIS 7+ASP.NET突破默认限制,支持海量并发连接数
- 为了成长,我所做的一些努力!
- poj 2513(欧拉路径+字典树映射)
- 我们错了 - One of us is wrong
- 新一代HTML5开发工具Wijmo子控件详解
- Vuebnb:一个用vue.js和Laravel构建的全栈应用
- Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
- 调用微信高级群发接口--视频群发接口出问题(微信官方文档错误纠正)
- CentOS配置网关服务器