单点登录系统CAS入门

什么是单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

单点登录系统CAS入门_第1张图片

什么是CAS

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

【1】开源的企业级单点登录解决方案。

【2】CAS Server 为需要独立部署的 Web 应用。

【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

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

单点登录系统CAS入门_第2张图片

SSO单点登录访问流程主要有以下步骤:

1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

CAS服务端部署

Cas服务端其实就是一个war包。

在资源\cas\source\cas-server-4.0.0-release\cas-server-4.0.0\modules目录下

cas-server-webapp-4.0.0.war  将其改名为cas.war放入tomcat目录下的webapps下。启动tomcat自动解压war包。浏览器输入http://localhost:8080/cas/login  ,可看到登录页面

单点登录系统CAS入门_第3张图片

不要嫌弃这个页面丑,我们后期可以再提升它的颜值。暂时把注意力放在功能实现上。

这里有个固定的用户名和密码   casuser /Mellon

登录成功后会跳到登录成功的提示页面

单点登录系统CAS入门_第4张图片

CAS服务端配置

端口修改

如果我们不希望用8080端口访问CAS, 可以修改端口

  • 修改TOMCAT的端口

打开tomcat 目录 conf\server.xml  找到下面的配置将端口8080,改为9100

  • 修改CAS配置文件

修改cas的WEB-INF/cas.properties

server.name=http://localhost:9100
  • 去除https认证

CAS默认使用的是HTTPS协议,如果对安全要求不高,可使用HTTP协议。我们这里讲解通过修改配置,让CAS使用HTTP协议。

  • 修改cas的WEB-INF/deployerConfigContext.xml

找到下面的配置


这里需要增加参数p:requireSecure="false",requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用

  • 修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

找到下面配置


参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。

参数p:cookieMaxAge="-1",是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。

我们这里将cookieSecure改为false ,  cookieMaxAge 改为3600

  •         修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml

​​​​​​​我们这里将cookieSecure改为false ,  cookieMaxAge 改为3600

CAS客户端入门小Demo

客户端工程1搭建

(1)搭建工程引入依赖

  创建Maven工程 (war)casclient_demo1  引入cas客户端依赖并制定tomcat运行端口为9001

(2)添加web.xml

  
      
     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:9100/cas/login  
              
          
          
            serverName  
            http://localhost:9001
          
      
      
        CASFilter  
        /*  
      
      
      
        CAS Validation Filter  
             org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter  
          
            casServerUrlPrefix  
            http://localhost:9100/cas  
          
          
            serverName  
            http://localhost:9001
          
      
      
        CAS Validation Filter  
        /*  
      
      
      
        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  
        /*  
      

(3)编写index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




一品优购


欢迎来到一品优购
<%=request.getRemoteUser()%>


request.getRemoteUser()为获取远程登录名

客户端工程2搭建

(1)创建Maven工程 (war)casclient_demo2  引入cas客户端依赖并制定tomcat运行端口为9002

(2)创建web.xml,参照casclient_demo1  ,将serverName的值改为http://localhost:9002,一共两处

(3)创建index.jsp  ,内容显示“欢迎来到二品优购”

单点登录测试

  1. 启动cas部署的tomcat 
  2. 启动客户端工程1和客户端工程2
  3. 地址栏输入http://localhost:9001/   和http://localhost:9002/  ,地址均会跳转到CAS登录页
  4. 输入用户名和密码后,页面跳转回9002  ,再次访问9001也可以打开主页面。

​​​​​​​CAS服务端界面改造

拷贝资源

(1)将品优购的登陆页login.html拷贝到cas系统下WEB-INF\view\jsp\default\ui 目录下

(2)将css  js等文件夹拷贝到  cas目录下

(3) 将原来的casLoginView.jsp 改名(可以为之后的修改操作做参照),将login.html改名为casLoginView.jsp

修改页面

编辑casLoginView.jsp 内容

(1)添加指令

<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

(2)修改form标签



......



  (3)  修改用户名框


(4)修改密码框

 

  (5)   修改登陆按钮





 Spring Security CAS集成

(1)引入依赖

(2)修改spring-security.xml


	  
           
          
                   
              
          
          
    
    
  	
      
          
          
          
          
      
          
        
      
    
   
    
      
          
      
		
	
		
		
	
		
	  
          
              
                  
              
          
          
        
          
              
                  
              
          
         
            
   		 
	  
	
	
	     
              
      
          
          
              
          
          
      
      

3)创建UserDetailsServiceImpl

public class UserDetailServiceImpl implements UserDetailsService {
	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		//构建角色集合
		List authorities=new ArrayList();
		authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
		return new User(username, ""  , authorities);		
	}
}

(4)   获取登录名

  • web.xml 添加springmvc

  	springmvc
  	org.springframework.web.servlet.DispatcherServlet
  	
  	
  		contextConfigLocation
  		classpath:springmvc.xml
  	
  
  
  
  	springmvc
  	*.do
  
  • 创建springmvc-servlet.xml
	
	
  • 创建UserController
@RestController
public class UserController {
	@RequestMapping("/findLoginUser")
	public void  findLoginUser(){
		String name = SecurityContextHolder.getContext().getAuthentication().getName();
		System.out.println(name);		
	}	
}

退出登录

  
          
          
              
          
          

单点登录  CAS			
          单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。
	   SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统
		单点登录流程:
		   1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
           2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
           3. 用户认证:用户身份认证。
           4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
           5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
           6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
		步骤:安装配置CAS服务端
		        安装:直接将war包放到tomcat的webapp下
				配置: * 去除https认证,改为http
				      * 服务端数据源配置 在cas下的web-inf下deployerconfigContext.xml中进行配置
					    1* dataSource数据库配置
						2* passwordEncoder密码存入方式
						3* dbAuthHandler授权处理
						更换dbAuthHandler
					  * 添加jar包到webapps/cas/WEB-INF/lib下
					  * 更改登录界面
					    1* 将我们的登陆页login.html拷贝到cas系统下WEB-INF\view\jsp\default\ui目录下,包括css等
						2* 添加指令
						3* 修改form标签,用户名密码框,修改登录按钮(并将隐藏域添加进来)
					  * 错误提示
					       设置国际化,将要返回的错误信息拷贝到message_zh_CN.properties中
		集成spring Security	(接上)	
		        创建maven项目,建立web.xml过滤器,创建spring-security.xml,添加html页面
				spring-security.xml配置文件:{
				    entry-point-ref入口点引用
					custom-filter过滤器
                	CAS入口点 开始	
					   单点登录服务器登录url
					   service配置自身工程根地址
					结束
					认证过滤器 开始
					   认证管理器
					   认证提供者
					   票据验证器
					   认证类
					结束
					单点登出 
				}
   		        创建认证类,继承UserDetailsService

 

你可能感兴趣的:(项目回顾)