开源单点登录系统CAS入门

单点登录系统CAS


 

目录

单点登录系统CAS

什么是单点登录?

CAS 介绍

CAS 服务端部署

(1)复制war包到tomcat

(2)运行tomcat

(3)访问CAS登录页面

CAS服务端配置

(1)修改tomcat端口号为9100

(2)修改CAS配置文件(WEB-INF/cas.properties)

(3)去除https认证

CAS客户端Demo

(1)创建web工程,引入依赖

(2)web.xml配置

(3)编写index.jsp

(4)启动服务端和客户端,访问客户端

(5)单点退出

数据源设置

登录页面改造

(1)替换页面

(2)登录请求提交相关修改

(3)错误提示

CAS客户端与Spring Security集成

(1)新建casclientdemo3工程

(2)集成


 

 

什么是单点登录?

单点登录(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入门_第3张图片

 

(1)复制war包到tomcat

(2)运行tomcat

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

(3)访问CAS登录页面

开源单点登录系统CAS入门_第5张图片

注意:CAS有默认的一个账号(casuser/Mellon),进行登录,跳转到登录成功页面

开源单点登录系统CAS入门_第6张图片

 

 

 

CAS服务端配置

(1)修改tomcat端口号为9100

开源单点登录系统CAS入门_第7张图片

 

(2)修改CAS配置文件(WEB-INF/cas.properties)

开源单点登录系统CAS入门_第8张图片

 

(3)去除https认证

修改cas的WEB-INF/deployerConfigContext.xml

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

其中cookieMaxAge为cookie存活时间,单位:秒

修改casWEB-INF/spring-configuration/warnCookieGenerator.xml

 

 

 

 

 

CAS客户端Demo

 

(1)创建web工程,引入依赖




  4.0.0

  demo
  casclientdemo1
  1.0-SNAPSHOT
  war

  casclientdemo1 Maven Webapp
  
    
    
      org.jasig.cas.client
      cas-client-core
      3.3.3
    
    
      javax.servlet
      servlet-api
      2.5
      provided
    
  
  
    
      
        org.apache.maven.plugins
        maven-compiler-plugin
        2.3.2
        
          1.7
          1.7
        
      
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        
          
          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()%>


重复以上步骤,创建clientdemo2,注意修改端口号

 

(4)启动服务端和客户端,访问客户端

开源单点登录系统CAS入门_第9张图片

 

认证不通过 跳转到登录界面,我们进行登录

开源单点登录系统CAS入门_第10张图片

跳转到了刚才访问的页面,我们接着访问demo2,无需登录,直接进入了index页面。

开源单点登录系统CAS入门_第11张图片

 

(5)单点退出

访问路径 :logout

开源单点登录系统CAS入门_第12张图片

修改配置,退出成功时,跳转到指定页面

修改配置文件:cas-servlet.xml

在logout后面加入service参数即可,在完成退出后,会重定向到service参数地址

开源单点登录系统CAS入门_第13张图片

开源单点登录系统CAS入门_第14张图片

 

 

 

数据源设置

修改deployerConfigContext.xml,配置数据源信息

	 
	  
	  

应用配置好的数据源 替换掉原来的数据源

开源单点登录系统CAS入门_第15张图片

注意:配置数据源时,将使用到的jar包,放入项目中(三个jar:c3p0、mysql驱动和cas-server-support-jdbc)

使用数据库账号密码,进行登录,登录成功

开源单点登录系统CAS入门_第16张图片

 

 

 

登录页面改造

 

(1)替换页面

拷贝页面到指定目录

修改文件名为:casLoginView.jsp

然后,插入JSP指令,重启进行测试

开源单点登录系统CAS入门_第17张图片

注意:需要将静态资源拷贝到cas目录下(css、js等)

 

(2)登录请求提交相关修改

开源单点登录系统CAS入门_第18张图片

 

(3)错误提示

修改messages_CN.properties配置文件,加入配置(实际需要将中文转换成unicode编码)

authenticationFailure.AccountNotFoundException=账号或密码错误!
authenticationFailure.FailedLoginException=账号或密码错误!

修改cas-servlet.xml中的默认国际化配置,设置为zh_CN

在页面添加错误提示

开源单点登录系统CAS入门_第19张图片

开源单点登录系统CAS入门_第20张图片

 

 

 

 

CAS客户端与Spring Security集成

 

 

(1)新建casclientdemo3工程

参考Spring Security Demo 创建

 

(2)集成【1】

引入新的依赖

  
	   org.springframework.security  
	   spring-security-cas  
	   4.1.0.RELEASE  
     
  
        org.jasig.cas.client  
        cas-client-core  
        3.3.3  
          
              
                org.slf4j  
                log4j-over-slf4j  
              
          
 

编写spring-security.xml配置文件



	
	
	  
           
          
                   
              
          
          
    
    
  	
      
          
          
          
          
      
          
        
      
    

    
    
      
          
      
		
	
		
		
	
		
	  
          
              
                  
              
          
          
        
          
              
                  
              
          
         
            
   		 
	  
	
	
	
	
	     
              
      
          
          
              
          
          
      
      
	

编写认证类

package com.casdemo;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import java.util.ArrayList;
import java.util.List;

/**
 * 认证类
 * 注意:因为和CAS集成,所以这个类不会有认证账号密码的逻辑。
 * Author xushuai
 * Description
 */
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);
    }
}

测试

访问demo3,自动跳转到了CAS登录中心

开源单点登录系统CAS入门_第21张图片

使用账号密码登录,自动返回到demo3的首页

开源单点登录系统CAS入门_第22张图片

获取当前登录名的方式和Spring Security获取登录名方式一致(使用SecurityContextHolder)

单点退出(直接使用超链接: 就可以直接退出了,也可以写全地址:http://localhost:9100/cas/logout)

 

 

你可能感兴趣的:(个人成长,技术点,单点登录,CAS)