概述

现在企业内部的系统越来越多,如果各个应用都有自己的用户系统,那么用户将不得不要记住不同系统的用户名密码,因此独立的用户系统应运而生,各个系统之间通过单点登录的方式,这样内部只需要记住一个用户名和密码,就可以自由的访问有权限的系统。

单点登录的实现

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&amp;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 单点登录 服务器整合相关推荐

  1. 【实战】从零搭建SSO单点登录服务器 - CAS认证流程

    前言 因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录.这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录.注销. 写这个系列的文章有两个目的: 记录自 ...

  2. 爆破专栏丨Spring Security系列教程之实现CAS单点登录上篇-概述

    作者:千锋一一哥 前言 从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案.开源项目,但 ...

  3. CAS单点登录框架使用

    CAS单点登录框架使用 CAS Server 1.GitHub上下载项目 https://github.com/apereo/cas-overlay-template/tree/5.3 5.3之后的都 ...

  4. CAS单点登录系统的实现

    CAS单点登录系统的实现 前言 一.CAS思路 二.代码实现 环境准备 代码实现 2.1 MTV系统前端判断是否登录,依据前端cookie是否存在用户信息 2.2 MTV系统前端判断链接是否携带临时票 ...

  5. CAS单点登录原理解析及相关配置

    1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中 ...

  6. java培训爆破专栏之Spring Security系列教程之实现CAS单点登录上篇-概述

    作者:千锋一一哥 前言 从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案.开源项目,但 ...

  7. cas单点登录-https的配置(一)

     前言   由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...

  8. cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?

    展开全部 CAS 原理和协议 从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client.CAS Server 需要独立部署,主要负责62616964757a686964616 ...

  9. CAS 单点登录/登出 系统

    前言: 在我们的实际开发中,更多的是采用分布式系统.那么问题来了,对于分布式系统的登录问题,我们如何解决呢? 如果说我们在每一个系统中都要进行一次登录,那么用户体验度也就差的没法用了.以京东商城为例, ...

最新文章

  1. Word中新建样式/修改样式对话框中的各个选项意义
  2. python3和2的区别大吗_python3和2为什么区别大吗
  3. ORB-SLAM2 学习1
  4. 算法学习(四)冒泡排序
  5. idea快速生成SpringBoot项目无法启动问题
  6. Atitit.软件硕士  博士课程 一览表 attilax 总结
  7. 这款机器人也想体验双十一!
  8. 关闭Linux 内存地址随机化机制
  9. php larvel4.2,Laravel 4.2参考手册 pdf
  10. vscode :code runner运行include多个文件的cpp
  11. js高级第三天(原型链及继承)
  12. 8位处理器、16位处理器、32位处理器和64位处理器
  13. 历练熟女给老实木讷男孩的恋爱建议(转贴)
  14. java释放资源_JAVA 手动释放资源问题
  15. 中国最实用的十大网站
  16. 获取文件夹中所有文件清单
  17. 大麦网首开客户分享会:没有吃喝 纯聊天
  18. 深度学习框架tensorflow学习与应用6(防止过拟合dropout,keep_prob =tf.placeholder(tf.float32))
  19. 老夫整理的1000行MySQL学习笔记传授有缘人
  20. “高效的隐私保护的张量分解方法研究”学习笔记(上)

热门文章

  1. c++网络通信(与服务器通信聊天)和c#网络通信
  2. 让Windows Server 2008+IIS 7+ASP.NET突破默认限制,支持海量并发连接数
  3. 为了成长,我所做的一些努力!
  4. poj 2513(欧拉路径+字典树映射)
  5. 我们错了 - One of us is wrong
  6. 新一代HTML5开发工具Wijmo子控件详解
  7. Vuebnb:一个用vue.js和Laravel构建的全栈应用
  8. Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
  9. 调用微信高级群发接口--视频群发接口出问题(微信官方文档错误纠正)
  10. CentOS配置网关服务器