jasig cas java示例_单点登录cas jasig学习笔记
1 什么是单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架
CAS 介绍
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
•开源的企业级单点登录解决方案。
•CAS Server 为需要独立部署的 Web 应用。
•CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
CAS 原理和协议
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,
需要登录时,重定向到 CAS Server
2 使用cas jasig
1 下载服务端与客户端
服务端 http://downloads.jasig.org/cas/
客户端 http://downloads.jasig.org/cas-clients/
2 服务端安装
我使用 cas-server-3.5.2-release版本 解压后在 modules目录下有一个cas-server-webapp-3.5.2.war包(我改为cas.war包),部署到服务器即可启动服务端 访问应用会进入登录界面,
cas默认只要用户名与密码相同就通过验证
3 客户端安装
1 编写一个web应用,客户端web应用需要到以下jar
我使用 cas-client-3.2.1-release版本 解压后在 modules目录下选择需要的jar包拷贝至你的web应用程序,我需要以下jar包
cas-client-core-3.2.1.jar
commons-codec-1.4.jar
commons-logging-1.1.jar
ehcache-core-2.2.0.jar
juli-6.0.29.jar
slf4j-api-1.5.11.jar
xmlsec-1.3.0.jar
2 web.xml中配置过滤器 以下配置是假设你的服务端应用上下文为cas
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CAS Single Sign Out Filter
org.jasig.cas.client.session.SingleSignOutFilter
CAS Single Sign Out Filter
/*
CASFilter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
http://localhost:8080/cas/login
serverName
http://localhost:8080
CASFilter
/*
CAS Validation Filter
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
casServerUrlPrefix
http://localhost:8080/cas
serverName
http://localhost:8080
CAS Validation Filter
/*
3 访问客户端应用,会进入cas的统一登录界面,因为我们在web.xml中配置了过滤器以及访问地址
4 如果我们不使用https访问,想实现单点登录,则需要修改两处
1 修改服务端下的 cas/WEB-INF/deployerConfigContext.xml
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
2、cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数 p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其 它窗口,仍会要求验证。
可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。
3 编写第2个web应用,配置第一个web应用一样,我们可以测试在第一个应用登陆后,再访问第2个应用已经不需要登录,实现了单点登录功能
3 单点登出
退出
4 获取登陆用户的信息 配置HttpServletRequestWrapperFilter过滤器
CAS HttpServletRequest Wrapper Filter
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
CAS HttpServletRequest Wrapper Filter
/*
CAS Assertion Thread Local Filter
org.jasig.cas.client.util.AssertionThreadLocalFilter
CAS Assertion Thread Local Filter
/*
之后使用request.getRemoteUser()
5 改变默认的cas服务端
1 使用数据库登录
1 需要cas-server-support-jdbc-3.5.2.jar,该包在服务端解压后在 modules目录下,拷贝到服务端的web应用
2 修改服务端应用中的WEB-INF下的deployerConfigContext.xml
cas服务默认用户名与密码相同即可通过验证,是因为给org.jasig.cas.authentication.AuthenticationManagerImpl的属性authenticationHandlers注入org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler
把该注入去掉,换成注入org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler,该类在cas-server-support-jdbc-3.5.2.jar包中,如下
value="select password from userinfo where username = ?" />
上面的dataSource配置成自己的数据源,如
对于passwordEncoder,如果不注入,则明码验证,以下是注入的一个例子,直接使用cas提供的DefaultPasswordEncode,可自己实现PasswordEncoder接口编写加密方法
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
在代码中使用DefaultPasswordEncoder。如字符串"aaa"经MD5加密
DefaultPasswordEncoder encoder=new DefaultPasswordEncoder("MD5");
System.out.println(encoder.encode("aaa"));
控制台输出 47bce5c74f589f4867dbd57e9ca9f808
3 修改默认的页面
1 cas默认的页面在cas\WEB-INF\view\jsp\default\ui 下
例如:
登录界面:casLoginView.jsp
登录成功:casGenericSuccess.jsp
登出界面:casLogoutView.jsp
2 CAS 的页面采用 Spring 框架编写,在cas/WEB-INF/classes/default_views.properties 可以找到对应的视图解析,可以修改cas/WEB-INF/cas-servlet.xml ”文件中的 viewResolver,
举个例子
${cas.viewResolver.basename}
properties基础名
6 在tomcat中 使用https 需要生成证书
1 使用jdk的keytool命令生成证书
1 首先要进入“C:/Program Files/Java/jdk1.6.0_02/jre/lib/security”;其中C:/Program Files/Java/jdk1.6.0_02为jdk的安装路径;
keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=localhost" -keystore server.keystore -storepass changeit
其中cn=localhost cn不能使用ip ,cas建议使用域名
2 导出证书到证书文件server.cer
keytool -export -alias tomcatsso -file server.cer -keystore server.keystore -storepass changeit
3 导入证书到jdk
keytool -import -alias tomcatsso -file server.cer -keystore cacerts -storepass changeit
2 打开%CATALINA_HOME%/conf/server.xml,找到如下内容:
将其换成如下内容
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="changeit" keystoreFile="C:/Program Files/Java/jdk1.6.0_02/jre/lib/security/server.keystore"/>
问题 若输入错误,想重新生成证书,可先用以下两句话将已安装的证书去除
keytool -delete -alias tomcatsso -keystore cacerts
keytool -delete -alias tomcatsso -keystore server.keystore
3 恢复前面在cas服务端去掉https而修改的两处,cas就可以使用https了
jasig cas java示例_单点登录cas jasig学习笔记相关推荐
- cas返回mysql数据_单点登录 CAS 5.* - 从数据库获取用户信息 - 4
前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录, 创建表和数据: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_I ...
- java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
package com.package_view; import com.package_model.*; import javax.swing.*; import java.awt.*; impo ...
- 使用CAS框架快速实现单点登录
作者:金云龙,如要转发,请注明出处作者 1.CAS示例程序配置 在CAS的主页上,可以看到CAS服务器,和客户端配置的完整过程,根据提示,完全可以配置成功服务器和客户端.同时,在CAS上也可以找到服务 ...
- 01单点登录CAS 5.3.4搭建及使用
01单点登录CAS 5.3.4搭建及使用 参考网址1 参照网址2 参照网址3 此文档代码GitHub地址 一.CAS介绍 单点登录Single Sign on (SSO), CAS ( Central ...
- 前端把cookie写在父域里_单点登录的三种实现方式
前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保 ...
- Java Web--HTML、CSS、JavaScript详细学习笔记(内含丰富示例代码)
** Java Web–HTML.CSS.JavaScript学习笔记 ** HTML(Hyper Text Markup Language超文本标记语言):控制的是页面的内容,是由标签组成的语言,能 ...
- 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)
深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...
- 《Java Web开发入门很简单》学习笔记
<Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...
- Java中如何创建自定义的注解学习笔记(MD版)
概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...
最新文章
- php access token缓存,微信小程序PHP 生成access_token存入缓存
- Docker CE 全自动安装
- linux之循环执行任务
- 使用Zookeeper实现leader选举-Leader Latch
- CodeForces - 1333C Eugene and an array(尺取)
- 威马汽车否认接盘ST众泰:没有任何兴趣参与
- 华为鸿蒙宣传悟空视频_给华为“鸿蒙”打Call,家居头条号探讨短片《悟空》获50万阅读...
- [18/11/22] 将点分十进制的IP地址化成二进制输出
- 解决 Chrome 请停用以开发者模式运行的扩展程序
- Java:转换列表 String 到一个字符串
- Linux简单基本命令
- oracle 11g grid下载地址
- NOD32杀毒软件如何更新及用户名列表
- 移动脑电在神经发展障碍研究中的运用
- 怎么创建自己的博客网站
- ZKP+图片授权——PhotoProof:proofs of permissible photo edits
- SAP系统常用配置参数设定
- 初识linux之进程
- Excel三维地图打不开
- 想给公司起个大气点的名字,大家帮忙啊!!!
热门文章
- 蘑菇丁自动填写日报---Python语言实现
- OPENWRT 文本(shell) 配置支持oray的花生壳DDNS,Web也可以配置
- UISearchController自动弹出键盘,调用becomeFirstResponder变为第一响应事件,和resignFirstResponder
- malloc函数总结
- Kettle连接Clickhouse 自定义插件
- 开始使用pgAdmin III
- 五年Java程序员进阶架构师的一些心得以及职业生涯规划
- 【小甲鱼C语言】课后笔记第一章第五节——取值范围
- js判断手机端还是电脑PC端(以及注意事项)
- Unity Addressables资源管理系统