CAS 单点登录/登出 与 SpringSecurity 的整合

CAS 单点登录登出 https://blog.csdn.net/Thor_Selen_Liu/article/details/81201333

SpringSecurity框架 — — 安全校验 https://blog.csdn.net/Thor_Selen_Liu/article/details/81220568

前言:

    通过前面两个知识点的学习,下面我们介绍,将两个知识点进行整合使用的方法。在前的 SpringSecurity框架中,我们即做校验又做登录,现在我们 整合 CAS 单点登录,将登录功能交给 CAS 去做,SpringSecurity 只管授权。

话不多说,下面我们以 demo 的方式进行演示:

大概步骤: ① 导入 spring+springsecurity 的依赖 ② 添加配置 springSecurity.xml 和 web.xml ③ 页面 ④ 认证类

 

一、先创建一个 spring-security.xml 工程

 

1. 建立 maven (war) 工程  casclient_demo3,引入 spring 依赖,和spring security 相关依赖,tomcat 端口设为 9003


	
	
		org.springframework
		spring-core
		${spring.version}
	
	
		org.springframework
		spring-web
		${spring.version}
	
	
		org.springframework
		spring-webmvc
		${spring.version}
	
	
		org.springframework
		spring-context-support
		${spring.version}
	
	
		org.springframework
		spring-test
		${spring.version}
	
	
		org.springframework
		spring-jdbc
		${spring.version}
	
	
	
		org.springframework.security
		spring-security-web
		4.1.0.RELEASE
	
	
		org.springframework.security
		spring-security-config
		4.1.0.RELEASE
	
	
		javax.servlet
		servlet-api
		2.5
		provided
	
	


	
		
		
			org.apache.maven.plugins
			maven-compiler-plugin
			3.2
			
				1.8
				1.8
				UTF-8
			
		
		
			org.apache.tomcat.maven
			tomcat7-maven-plugin
			
				
				9003
				
				/
			
		
	

 

2. 配置文件 springSecurity.xml 和 web.xml 添加过滤器等配置

(1) springSecurity.xml 文件配置




    
    
    
	
    
    
        
		
        
        
        
            
        
        
    
	
    
    
        
            
                
                
            
        
    

(2) web.xml 文件配置



  casclient_demo3
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
    
    
        contextConfigLocation
        classpath:springSecurity.xml
    
    
         
            org.springframework.web.context.ContextLoaderListener
        
    	
    
    
    
        CharacterEncodingFilter
        
            org.springframework.web.filter.CharacterEncodingFilter
        
        
            encoding
            utf-8
        
          
            forceEncoding  
            true  
          
    
    
        CharacterEncodingFilter
        /*
    
	
    
      
        springSecurityFilterChain  		
        
            org.springframework.web.filter.DelegatingFilterProxy
          
      
      
        springSecurityFilterChain  
        /*  
    	
	 
	 
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc.xml
        
    
    
        springmvc
        *.do
    

3.创建页面

    CAS 单点登录/登出 与 SpringSecurity 的整合_第1张图片

4. 认证类

package com.itcast.service;

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

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;
/**
 * 认证类
 */
public class UserDetailsServiceImpl implements UserDetailsService {

	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		
        System.out.println("经过了认证类的请求");
        List grantAuths = new ArrayList();
        grantAuths.add(new SimpleGrantedAuthority("ROLE_SELLER"));
        grantAuths.add(new SimpleGrantedAuthority("ROLE_USER"));
        /**
         *  认证信息(角色)
         *  参数:用户名 ,密码,权限集合
         */
        return new User(username,"",grantAuths );
    }
}

 

 

二、在第一步的基础上 对 CAS 进行集成

1. 添加 springsecurity 与 CAS 整合的依赖 jar 包


      
        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  
              
          
     

2. 修改 springSecurity.xml 配置文件   (本项目 最最最 重要的一部分)

注意:在spring-security 与 CAS 集成以后,原本在web.xml 中要配置的一大堆的过滤器 就不需要 web.xml 文件中配置了,都放到 spring-security.xml 中进行配置。

(1) 删除原来有 security 管理的登录内容。需要删除的内容如下:




    





    
        
            
            
        
    

(2) 既然 security 不再管理登录,那么 就需要配置 CAS 的信息 来管理登录 即:各种过滤器

    注意:这些过滤器 是一种调用关系: 认证过滤器  -->  认证管理器  -->  认证提供者(真正干活的)

    认证提供者里面包含:① 用户详细信息服务提供者(里面没有登录的信息只有权限的信息);②   票据认证器




    
    
    
	
    
    
    
        
        
		
                   
        
              
          
          
	
	
	
      
          
          
          
          
      
          
        
      
    
    
    
      
          
     
    
	
		
		
	
    
	  
          
              
                  
              
          
          
        
          
              
                  
              
        
        
         
            
   		 
	  
    
    
    
         
              
      
          
          
              
        
          
          
      
    
    

 

    总结:对于不同的项目 在配置里面只需要更改四处即可

    ① 单点登录服务器登录的URL,只需要改 端口号

    ② 自己项目的路径,只需要改 端口号

  

    ③ 票据认证器的地址,只需要改 端口号

    ④ 单点登出的地址,只需要改 端口号 和 service 参数

(3) 编写一个获取登录名的 类

package com.itcast.service;

import java.util.HashMap;
import java.util.Map;

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 运营商登录的控制层的类
 * @author jt
 *
 */
@RestController
@RequestMapping("/login")
public class LoginController {

	@RequestMapping("/showName")
	public String showName(){
//		Map map = new HashMap();
		// 获得用户名信息:
		String username = SecurityContextHolder.getContext().getAuthentication().getName();
//		map.put("username", username);
		
		return username;
	}
}

    创建springmvc.xml 配置文件




    
    

(4) 测试 运行

    启动 CAS 的服务,启动工程,地址栏:localhost:9003

 

你可能感兴趣的:(security+cas)