单点登录流程
- 客户端请求目标服务器
- 目标服务器重定向到cas服务器
- cas服务器进行验证,通过则请求目标服务器,将ticket传给目标服务器
- 目标服务器根据ticket,请求cas服务器,获取用户登录信息
- cas服务器返回验证消息给目标服务器
项目实现
1、导入依赖包
<!-- shrio 权限框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- shrio 整合cas单点登录 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>1.2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support -->
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>1.7.0-GA</version>
</dependency>
2、 编辑配置文件
- 以下为shiro-cas相关部分
# shiro - cas 配置
shiro:
# 在访问cas服务器登录之后,会返回一个ticket。由该地址接收
casFilterUrlPattern: /shiro-cas
# cas服务前缀
casServerUrlPrefix: http://localhost:8181/cas
# shiro服务前缀
shiroServerUrlPrefix: http://localhost:${server.port}${server.servlet.context-path}
# 登录地址
loginUrl: ${shiro.casServerUrlPrefix}/login?service=${shiro.shiroServerUrlPrefix}${shiro.casFilterUrlPattern}
# 登出地址
logoutUrl: ${shiro.casServerUrlPrefix}/logout?service=${shiro.shiroServerUrlPrefix}${shiro.casFilterUrlPattern}
- 以下为全量配置
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
port: 40301
connection-timeout: 5000ms
servlet:
context-path: /shiro
session:
cookie:
http-only: true
spring:
application:
name: service-auth
# shiro - cas 配置
shiro:
# 在访问cas服务器登录之后,会返回一个ticket。由该地址接收
casFilterUrlPattern: /shiro-cas
# cas服务前缀
casServerUrlPrefix: http://localhost:8181/cas
# shiro服务前缀
shiroServerUrlPrefix: http://localhost:${server.port}${server.servlet.context-path}
# 登录地址
loginUrl: ${shiro.casServerUrlPrefix}/login?service=${shiro.shiroServerUrlPrefix}${shiro.casFilterUrlPattern}
# 登出地址
logoutUrl: ${shiro.casServerUrlPrefix}/logout?service=${shiro.shiroServerUrlPrefix}${shiro.casFilterUrlPattern}
3、自定义配置casFileter
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.cas.CasFilter;
import org.apache.shiro.cas.CasToken;
import org.slf4j.Log