SSO-CAS单点登录(一)
https://wiki.jasig.org/display/CASUM/Home
http://downloads.jasig.org/cas-clients/
CAS(Central Authentication Server)
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中
参数:
-alias 密钥的别名(唯一)
-keyalg 加密算法
-keystore 指定生成的keystore存放位置
-storepass 指定密钥库的口令
-dname 配置密钥发布者相关信息
CN 服务器域名,本地测试用localhost(或者修改host文件,127.0.0.1 sso.gc.com)
OU 组织单位名称
O 组织名称
L 城市或区域名称
ST 省/市/自治区名称
C 双字母国家/地区代码
-keypass 访问具体密钥的口令
-validity 密钥的有效期(默认90天)
【生成keystore】
keytool -genkey -alias gc -keyalg RSA -keystore e:/keys/mykeystore -storepass 111111 -dname "CN=sso.gc.com, OU=gc.com, O=gc.com, L=bj, ST=bj, C=cn" -keypass 111111 -validity 365
从keystore密钥库导出证书
参数:
-alias 上一步所指定的密钥别名
-keystore 上一步指定的密钥库地址
-storepass 上一步指定的密钥库口令
-file 指定即将导出的证书的存放地址
【从keystore导出证书】
keytool -export -alias gc -keystore e:/keys/mykeystore -storepass 111111 -file e:/keys/gckey.crt
客户端拿到证书后,将证书导入到的JVM中
cacerts证书文件(The cacerts Certificates File)
该证书文件存在于java.home\jre\lib\security目录下,是Java系统的CA证书仓库
将上面生成的证书导入到客户端的JVM中
参数:
-trustcacerts 信任的证书
-alias 证书别名
-keystore 客户端keystore的地址
-storepass 客户端keystore口令
-file 被导入的证书的位置
【客户端:导入证书】
keytool -import -trustcacerts -alias gc -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit -file e:/keys/gckey.crt
查看证书库里面的证书信息
keytool -list -v -alias gc -keystore e:/keys/mykeystore -storepass 111111
查看客户端JVM中的证书信息
keytool -list -v -alias gc -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
删除证书库里面的某个证书
keytool -delete -alias gc -keystore e:/keys/mykeystore -storepass 111111
删除客户端JVM中的证书信息
keytool -delete -alias gc -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="e:/keys/mykeystore" keystorePass="111111"/>
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
修改为通过数据库查询用户名对应的密码进行认证 <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"property name="dataSource" ref="dataSource"property name="sql" value="select password from t_admin_user where login_name = ?"<!-- property name="passwordEncoder" ref="MD5PasswordEncoder" --> /><!-- JDBC数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><value>jdbc:mysql://localhost:3306/gc</value></property><property name="username"><value>root</value></property><property name="password"><value>root</value></property> </bean><!-- MD5加密后与数据库查询得到的密码进行比对 --> <bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"><constructor-argindex="0"><value>MD5</value></constructor-arg> </bean>
注意:-DrepositoryId配置的是maven中settings.xml中配置的仓库id,如果这里配错了,将无法deploy,发生401,ReasonPhrase: Unauthorized.
mvn deploy:deploy-file -DgroupId=org.jasig.cas -DartifactId=cas-server-support-jdbc -Dversion=3.4.10 -Dpackaging=jar -Dfile=E:\learning\cas\cas\cas-server-3.4.10\modules\cas-server-support-jdbc-3.4.10.jar -Durl=http://localhost:8081/nexus/content/repositories/releases/ -DrepositoryId=nexus-releases
<!-- CAS服务访问数据库的接口 --> <dependency><groupId>org.jasig.cas</groupId><artifactId>cas-server-support-jdbc</artifactId><version>3.4.10</version> </dependency><!-- Mysql数据库连接器 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.28</version> </dependency>
create table t_admin_user (id bigint not null auto_increment,email varchar(255),login_name varchar(255) not null unique,name varchar(255),password varchar(255),primary key (id)
) ENGINE=InnoDB;insert into t_admin_user (email,login_name,name,password) values ('gc@gc.com','hqh','hqh','123');
E:\learning\cas\cas\cas-server-3.4.10\cas-server-webapp>mvn package
将war包拷贝到tomcat的webapps下
重启tomcat
访问:https://sso.gc.com:8443/cas/login
输入用户名和密码,CAS SERVER将从数据库中查询uasername对应的密码进行验证,如果一致,则认证通过
![](http://dl2.iteye.com/upload/attachment/0092/8294/3af60195-6e3a-33bd-ac2a-6871c3acc33c.jpg)
输入用户名和密码(数据库中存储的用户名hqh和密码123)
![](http://dl2.iteye.com/upload/attachment/0092/8296/5761440f-e52e-3384-a616-a9a83988115c.jpg)
<dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.2.1</version> </dependency>
<!-- 单点登陆开始 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://sso.gc.com:8443/cas/login</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8088</param-value></init-param></filter><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://sso.gc.com:8443/cas</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8088</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param><init-param><param-name>tolerance</param-name><param-value>5000</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Authentication Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 单点登陆结束 -->
<!-- 单点登陆开始 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://sso.gc.com:8443/cas/login</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8888</param-value></init-param></filter><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://sso.gc.com:8443/cas</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8888</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param><init-param><param-name>tolerance</param-name><param-value>5000</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Authentication Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 单点登陆结束 -->
![](http://dl2.iteye.com/upload/attachment/0092/8300/44f9aebf-8692-3d13-9b1f-4bf560a13f76.jpg)
选择一个页面进行登录,登录成功后,再访问另一个项目,将不需要登录了
![](http://dl2.iteye.com/upload/attachment/0092/8302/69e5eb5d-a450-3fdc-bd56-cf8703c1010e.jpg)
![](http://dl2.iteye.com/upload/attachment/0092/8304/d8affe3c-7dbf-3e00-bb73-f24666ce8d1f.jpg)
<!-- 注销登录 --> <servlet><servlet-name>logoutServlet</servlet-name><servlet-class>com.gc.user.web.LogoutServlet</servlet-class> </servlet><servlet-mapping><servlet-name>logoutServlet</servlet-name><url-pattern>/logoutServlet</url-pattern> </servlet-mapping>
package com.gc.user.web;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doSingleSignOut(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}public void doSingleSignOut(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{response.sendRedirect("https://sso.gc.com:8443/cas/logout");}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><div align="right"><a href="/client/logoutServlet">注销</a></div><h1>8088端口,项目A的一个很重要的页面</h1>
</body>
</html>
SSO-CAS单点登录(一)相关推荐
- [精华][推荐]SSO CAS单点登录框架学习 搭建详细步骤及源码
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- SSO之CAS单点登录详细搭建
2019独角兽企业重金招聘Python工程师标准>>> SSO之CAS单点登录详细搭建 : 环境说明: 同一个机器上环境如下: 操作系统:windows7 64位 JDK版本:1.7 ...
- CAS+SSO配置单点登录完整案例
CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...
- SSO、单点登录、集成 CAS、OAuth2
SSO.单点登录.集成 CAS.OAuth2 JeeSite 已经默认集成了两种单点登录方式(Single Sign On): 1.SSO(简单登录)接口,实现快速登录系统. 2.与 Apereo C ...
- CAS单点登录(一)——初识SSO
前言:其实好早就想把CAS的这一套知识整合一下,在工作上也应用到了这块,只是最近才在工作上接触到CAS,所以刚好把这些知识总结一下.这块可能是一个比较大的模块知识点,所以会有多篇文章进行逐一展开,笔者 ...
- web工程中集成cas单点登录
背景 cas的服务端已经搭建成功,现在需要在web项目中集成cas client.我们项目使用spring 1.在pom中配置 <!--cas单点登录 --><dependency& ...
- 爆破专栏丨Spring Security系列教程之实现CAS单点登录上篇-概述
作者:千锋一一哥 前言 从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案.开源项目,但 ...
- CAS单点登录原理简单介绍
1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...
- SpringBoot 简单实现仿CAS单点登录系统
SpringBoot 简单实现仿CAS单点登录系统 新境界开源开源SSO项目介绍 新境界开源SSO项目实现原理大致如下: 新境界开源SSO项目登录流程介绍 新境界开源SSO项目授权登录流程介绍 新境界 ...
- cas单点登录-https的配置(一)
前言 由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...
最新文章
- R-Bioconductor安装
- linux 下 php 扩展
- SAP ABAP实用技巧介绍系列之 获得webservice的schema node
- 第1章 策略模式【StrategyPattern】
- tomcat(7)日志记录器
- notebook打开外部文件_CAD外部参照真是个好东西!
- Java面试问题汇总(Redis)
- Perfect Appearance NIKE KD 9 PERFORMANCE REVIEW
- eclipse中自定义videoview类_android控件之VideoView建立自己的播放器
- zookeeper版本更新_很遗憾,没有一篇文章能讲清楚ZooKeeper
- c++ -- 重载、重写(覆盖)和隐藏的区别
- OSPF的多域配置-要点总结
- 【OpenCV 例程200篇】201. 图像的颜色空间转换
- 联想智能云教室安win7_联想智能云教室云部署.PDF
- SSO单点登录系统的设计与实现
- java getselectedrow_Java JTable.getSelectedRow方法代碼示例
- FlinkSQL字段血缘解决方案及源码
- java毕业生设计学生课堂互动教学系统计算机源码+系统+mysql+调试部署+lw
- lone warrior
- python 二进制流长度_python怎么处理二进制流
热门文章
- PoCBox – 漏洞测试验证辅助平台
- 解决 python pytplot绘图 图片长宽无法调整、文件保存为矢量图的问题记录。
- 电脑使用时自动睡眠的问题
- 2023年阿里云计算新版ACE笔试实验题库900+
- 《天天数学》连载66:三月六日
- Java基础---结构与数组与排序
- 检测java是否连接到SQL server数据库 + SQL server数据库内置账户sa无法登录
- 腾讯CDC谈扁平化设计
- 计算机的图标怎么会恢复,桌面图标变成未知图标了怎么恢复?
- docker实战2 (docker swarm的应用,docker集群的构建,在docker集群中部署服务的创建与更新)