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学习笔记相关推荐

  1. cas返回mysql数据_单点登录 CAS 5.* - 从数据库获取用户信息 - 4

    前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录, 创建表和数据: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_I ...

  2. java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例

    package com.package_view; import  com.package_model.*; import javax.swing.*; import java.awt.*; impo ...

  3. 使用CAS框架快速实现单点登录

    作者:金云龙,如要转发,请注明出处作者 1.CAS示例程序配置 在CAS的主页上,可以看到CAS服务器,和客户端配置的完整过程,根据提示,完全可以配置成功服务器和客户端.同时,在CAS上也可以找到服务 ...

  4. 01单点登录CAS 5.3.4搭建及使用

    01单点登录CAS 5.3.4搭建及使用 参考网址1 参照网址2 参照网址3 此文档代码GitHub地址 一.CAS介绍 单点登录Single Sign on (SSO), CAS ( Central ...

  5. 前端把cookie写在父域里_单点登录的三种实现方式

    前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保 ...

  6. Java Web--HTML、CSS、JavaScript详细学习笔记(内含丰富示例代码)

    ** Java Web–HTML.CSS.JavaScript学习笔记 ** HTML(Hyper Text Markup Language超文本标记语言):控制的是页面的内容,是由标签组成的语言,能 ...

  7. 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)

    深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...

  8. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  9. Java中如何创建自定义的注解学习笔记(MD版)

    概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...

最新文章

  1. php access token缓存,微信小程序PHP 生成access_token存入缓存
  2. Docker CE 全自动安装
  3. linux之循环执行任务
  4. 使用Zookeeper实现leader选举-Leader Latch
  5. CodeForces - 1333C Eugene and an array(尺取)
  6. 威马汽车否认接盘ST众泰:没有任何兴趣参与
  7. 华为鸿蒙宣传悟空视频_给华为“鸿蒙”打Call,家居头条号探讨短片《悟空》获50万阅读...
  8. [18/11/22] 将点分十进制的IP地址化成二进制输出
  9. 解决 Chrome 请停用以开发者模式运行的扩展程序
  10. Java:转换列表 String 到一个字符串
  11. Linux简单基本命令
  12. oracle 11g grid下载地址
  13. NOD32杀毒软件如何更新及用户名列表
  14. 移动脑电在神经发展障碍研究中的运用
  15. 怎么创建自己的博客网站
  16. ZKP+图片授权——PhotoProof:proofs of permissible photo edits
  17. SAP系统常用配置参数设定
  18. 初识linux之进程
  19. Excel三维地图打不开
  20. 想给公司起个大气点的名字,大家帮忙啊!!!

热门文章

  1. 蘑菇丁自动填写日报---Python语言实现
  2. OPENWRT 文本(shell) 配置支持oray的花生壳DDNS,Web也可以配置
  3. UISearchController自动弹出键盘,调用becomeFirstResponder变为第一响应事件,和resignFirstResponder
  4. malloc函数总结
  5. Kettle连接Clickhouse 自定义插件
  6. 开始使用pgAdmin III
  7. 五年Java程序员进阶架构师的一些心得以及职业生涯规划
  8. 【小甲鱼C语言】课后笔记第一章第五节——取值范围
  9. js判断手机端还是电脑PC端(以及注意事项)
  10. Unity Addressables资源管理系统