概述

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

单点登录的实现

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 { @Override
public 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=root db.minimumConnectionCount=10
db.maximumConnectionCount=20

这样cas 就支持使用数据库进行用户验证了。

CAS 单点登录 服务器整合的更多相关文章

  1. CAS单点登录服务器搭建

    关于cas单点登录的原理及介绍这里不做说明了,直接开始: 1.war包下载 去官网(https://www.apereo.org/projects/cas/download-cas)下载cas_ser ...

  2. CAS单点登录系统整合——注册的问题

    最近一段时间在搞CAS单点登录系统,涉及到几个子系统的整合问题.对于注册,这里遇到了一个选择: 在子系统内完成注册,然后把信息同步到CAS系统: 在CAS系统中完成基本信息的注册,比如:用户名.邮箱. ...

  3. 搭建CAS单点登录服务器

    最近公司的一个项目需要用到单点登录的功能,之前对单点登录了解得不多.于是网上找了下单点登录的解决方案,发现CAS是个不错的解决方案.于是搭个环境测试了一下.这里记录下测试的详细步骤. 官网:http: ...

  4. CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建,详情见:搭建CAS单点登录服务器.然而前面只是简单地介绍了服务器的搭建,其验证方式是原始的配置文件的方式,这显然不能满足日常的需求.下面介绍下通过mysql数据库认证 ...

  5. CAS单点登录相关配置

    一.CAS单点登录服务端的部署 部署 把CAS所对应的war包部署到tomcat中 4.品优购资源V1.3\配套软件\配套软件\CAS\cas.war 配置 更改tomcat的端口号 <Conn ...

  6. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

  7. JAVA CAS单点登录(SSO) 教程

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...

  8. cas系列(一)--cas单点登录基本原理

    (这段时间打算做单点登录,因此研究了一些cas资料并作为一个系列记录下来,一来可能会帮助一些人,二来对我自己所学知识也是一个巩固.) 一.为什么要实现单点登录 随着信息化不断发展,企业的信息化过程是一 ...

  9. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

随机推荐

  1. express 学习札记

    Enjoy yourself! 祝你玩得开心! I have no idea. 我没有头绪. I just made it! 我做到了!  I’ll see to it 我会留意的. Express ...

  2. jmeter简单压测设置

    参数化 随机参数 时间参数 顺序自增函数  文件读取  直接引用 响应断言 用来查看sessionid 关联 关联引用 jmeter操作数据库 安装连接程序包 ip 端口号 哪个数据库 可以执行多条s ...

  3. netty 之 传统的阻塞io 体系回顾

    io 体系回顾: 流的概念: java 程序 通过流来进行完成输入与输出的.流是生产或者消费信息的抽象,流通过java 的 输入/输出系统与物理设备相连,尽管与他们链接的物理设备不尽相同,所有流的行为 ...

  4. CentOS 6、7 安装 Golang

    方法一:使用二进制文件安装 (推荐) 1.下载二进制文件: wget https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz ...

  5. clickableSpan实现textView文字部分点击有响应

    先定义一个clickableSpan的子类 class MyClickText extends ClickableSpan{ private Context context; public MyCli ...

  6. auth 认证模块

    . auth认证模块: http://www.cnblogs.com/liwenzhou/p/9030211.html auth模块的知识点: . 创建超级用户 python manage.py cr ...

  7. Informatica_(6)性能调优

    六.实战汇总31.powercenter 字符集 了解源或者目标数据库的字符集,并在Powercenter服务器上设置相关的环境变量或者完成相关的设置,不同的数据库有不同的设置方法: 多数字符集的问题 ...

  8. hdu 5491(2015合肥网赛)The Next

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5491 题意就是,T组测试数据.然后L,S1,S2.L的二进制中有x个1,x满足  S1<=x< ...

  9. poj_1979(dfs)

    Red and Black There is a rectangular room, covered with square tiles. Each tile is colored either re ...

  10. maven 单元测试 ( http://www.cnblogs.com/qinpengming/p/5225380.html )

     对junit单元测试的报告:类似这样的结果 ------------------------------------------------------- T E S T S ----------- ...