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 ③ 页面 ④ 认证类
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
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.创建页面
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 );
}
}
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