spring security 整合 CAS

Spring security+CAS单点登录

Spring security 版本 3.2.4 

CAS Server版本  3.4.10

CAS client 版本 3.2.1

JDK 1.7

Tomcat 8.0

 

原理:

从结构上看,CAS 包含两个部分: CAS Server 和 CAS ClientCAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图是 CAS 最基本的协议过程:

图 1. CAS 基础协议

 

CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted CookieTGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保ST 和 TGC 的安全性。协议工作过程中会有 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。

另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。

 

配置tomcat https 

本例是将CAS server 和 CAS client部署在不同的tomcat 上,首先需要为客户端和服务端的tomcat配置https协议:

SSL文件准备:
server.keystore——服务器端库文件
client.keystore——客户端库文件
server.cer——服务器端证书(自制)
client.cer——客户端证书(自制)
cacerts——证书链


1、生成服务器端库文件
keytool -genkey -v -alias server -keyalg RSA -keystore F:\server.keystore -validity 36500 

(输入密码,并输入你的名字和姓氏,组织名称,地区名称等,注意在填入 你的名字和姓氏CN的时候输入localhost)

 

2、导出服务器端证书
keytool -export -alias server -storepass 密码 -file F:\server.cer -keystore F:\server.keystore


3、生成客户端库文件
keytool -genkey -v -alias client -keyalg RSA -keystore F:\client.keystore -validity 36500 

(输入密码,并输入你的名字和姓氏,组织名称,地区名称等,注意在填入 你的名字和姓氏CN的时候输入localhost)


4、导出客户端证书
keytool -export -alias client -storepass 密码 -file F:\client.cer -keystore F:\client.keystore

 

5、导入服务器端证书到cacerts(cacerts是JDK下的jre的可信任证书仓库)
keytool -import -trustcacerts -alias server -file F:\server.cer -keystore ”%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit

6、
6、导入客户端证书到cacerts(cacerts是JDK下的jre的可信任证书仓库)
keytool -import -trustcacerts -alias server -file F:\server.cer -keystore ”%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit


将server.keystore、client.keystore、server.cer、client.cer、cacerts文件复制到cas服务器、cas客户机、cas客户机1的TOMCAT_HOME主目录及JAVA_HOEM\jre\lib\security目录下。

 

 

分别修改CAS server 和 CAS client的tomcat中的 conf/server.xml

修改CAS server的tomcat以下端口:

 <Connector useBodyEncodingForURI="true" URIEncoding="UTF-8" connectionTimeout="20000" port="8089" protocol="HTTP/1.1" redirectPort="8443"/>

   

   <Connector useBodyEncodingForURI="true" URIEncoding="UTF-8" SSLEnabled="true" acceptCount="100" clientAuth="false" 

   disableUploadTimeout="true" enableLookups="true" 

   keystoreFile="/server.keystore" keystorePass="wentao211()" 

   maxSpareThreads="75" maxThreads="200" minSpareThreads="5" port="8443" 

   protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" 

   sslProtocol="TLS"/>

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8019" protocol="AJP/1.3" redirectPort="8443"/>

 

为了防止和CAS clienttomcat端口冲突,我将端口修改

 

 

修改CAS clienttomcat的端口:

  <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8445" useBodyEncodingForURI="true"/>

   

   <Connector SSLEnabled="true" URIEncoding="UTF-8" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="true" keystoreFile="/client.keystore" keystorePass="wentao211()" maxSpareThreads="75" maxThreads="200" minSpareThreads="5" port="8445" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS" useBodyEncodingForURI="true"/>

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8445"/>

 

 

配置CAS Server

将下载的cas-server-3.4.10-release.zip 解压,把cas-server-3.4.10/modules下面的

cas-server-webapp-3.4.10.war拷贝到tomcat下的webapps下,然后启动tomcat;或者直接从myeclipse中导入war包,将其导入到myeclipse中,然后再发布到tomcat中,推荐使用后缀,因为我们需要继续对CAS server进行一些修改才能满足我们的需求:

 

1,我们需要使用数据源来对用户进行登陆验证,本例使用mysql作为数据库,所以需要拷贝一个mysql-connector-java-5.1.33-bin.jar和一个cas-server-support-jdbc-3.4.10.jarlib下面,

并且需要在数据库中建立一个表,用来存放用户数据,当然表中的字段可以根据需要新增,其中的字段名也是可以修改,只是需要在配置

deployerConfigContext.xml的数据源中字段查询的时候跟其对应上

 

然后修改/WEB-INF/deployerConfigContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

xmlns:sec="http://www.springframework.org/schema/security"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">

<property name="credentialsToPrincipalResolvers">

<list>

<bean

class=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值