CAS单点登录-客户端集成(cas-client)(九)
来源:互联网 发布:知之深爱之切电子书 编辑:程序博客网 时间:2024/05/10 14:33
CAS单点登录-客户端集成(cas-client)(九)
当我们把单点系统搭建好了,或者客户已经提供好了单点登录服务,往往会想,如何集成cas、如何能在业务系统上用cas(本章只讲cas协议,oauth2、SAML等后续)
但情况往往是这样的:
- 业务系统已集成shiro
- 业务系统已集成pac4j
- 业务系统已集成spring security
- 业务系统拥有自己一套鉴权机制
而需求一般都是这样的:
- 当次请求是否需要login,未login跳转登录,否则允许通过
- 当次请求是否满足权限要求,不满足输出异常
上述说得简单,但我们的使用时还是有一定的复杂度,例如:
- 以其他用户身份操作时权限如何处理(权限代理)
- restful、jwt方式鉴权(移动端使用)
但这博文很简单,完成两个目标:
- 如何使用cas-client
- 需要登录的跳转到登录页
Cas Client特性
- j2ee方式配置(配置web.xml的filter达到单点登录)
- saml协议认证方式
- spring、spring security的集成
当然除了这些还可以集成jetty、tomcat等等
回顾cas协议
cas client如何强大方便,都是遵循着cas协议进行认证,否则是不能完成工作的。
客户端地址:http://localhost:8080/sample
cas服务地址:https://passport.com
协议流程:
1. 若业务系统未登录,302到https://passport.com?service=http://localhost:8080/sample
2. 用户提交用户名密码后,302到http://localhost:8080/sample?ticket=ABC123
3. 业务系统验证ticket,并获取用户数据,https://passport.com/p3/serviceValidate?service=p3/serviceValidate?service&ticket=ABC123
4. 成功获取用户数据
其实我们只关心两个阶段,其他都交给cas client去完成:
1. 请求的路径是否需要跳转到登录页
2. 回来的用户是否能访问被请求资源
那么可想而知,肯定会有两个filter,其中包括:
1. AuthenticationFilter(用于判断请求是否需要跳转到login及鉴权)
2. CallbackFilter(用于cas回调用作校验ticket以及获取用户数据鉴权后302到第一次请求的url)
3. LogoutFilter(退出时作单点退出)
上面说得非常啰嗦,下面马上来实战~
实战
查看CasClient官网Demo
直接看web.xml,最核心也是这个文件:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://localhost:8443/cas</param-value> </init-param> </filter> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://localhost:8443/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080/sample</param-value> </init-param> </filter> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://localhost:8443/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080/sample</param-value> </init-param> <init-param> <param-name>redirectAfterValidation</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>useSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Authentication Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list></web-app>
以上的核心点有两个:
- serverName 客户端访问路径
- casServerUrl cas服务路径
但上面的配置非常的简单,除了被排除
的所有路径都会跳转进行登录
再加一个需求,判断路径是否需要跳转到登录页再跳转,那么不得不介绍一下AuthenticationFilter
的一些简单配置:
自定义鉴权路径
好的,我们试试新增zhangsan.jsp(允许不登录)、wangwu.jsp必须登录
然后在实现UrlPatternMatcherStrategy
进行判断
SimpleUrlPatternMatcherStrategy.java
/* * 版权所有.(c)2008-2017. 卡尔科技工作室 */package com.carl.auth.sso.client.demo;import org.jasig.cas.client.authentication.UrlPatternMatcherStrategy;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author Carl * @date 2017/9/28 * @since 1.5.0 */public class SimpleUrlPatternMatcherStrategy implements UrlPatternMatcherStrategy { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Override public boolean matches(String url) { logger.debug("访问路径:" + url); return url.contains("zhangsan.jsp"); } @Override public void setPattern(String pattern) { }}
认证过滤器配置调整:
<filter> <filter-name>CAS Authentication Filter</filter-name> <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>--> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://passport.sso.com:8443/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080</param-value> </init-param> <init-param> <param-name>ignoreUrlPatternType</param-name> <param-value>com.carl.auth.sso.client.demo.SimpleUrlPatternMatcherStrategy</param-value> </init-param> <init-param> <param-name>ignorePattern</param-name> <param-value>.*</param-value> </init-param> </filter>
尝试访问:http://localhost:8080/sample/zhangsan.jsp 不会转发到登录页
而:http://localhost:8080/sample/wangwu.jsp 会转发到登录页
总结
本章讲解了cas-client如何使用,但我们实际上远远比这要复杂,当然我们这个demo也作为入门了解阶段学习,但目标很明确,要了解cas的整个转发过程
下一章内容比较多,会说常用shiro的集成,所以必须具备这章的知
下载代码尝试: 其他版本可以到GitHub或者码云查看
具体模块路径:sso-client-demo/sso-cas-client-demo
发现一些意外的事情可以考虑翻翻前面的博客进行学习哦
作者联系方式
如果技术的交流或者疑问可以联系或者提出issue。
邮箱:huang.wenbin@foxmail.com
QQ: 756884434 (请注明:SSO-CSDN)
- CAS单点登录-客户端集成(cas-client)(九)
- Cas单点登录(6)Cas Client配置
- cas单点登录系统:客户端(client)详细配置
- shiro 集成cas单点登录
- Cas单点登录客户端配置
- SSO单点登录系列1:cas客户端源码分析cas-client-java-2.1.1.jar
- CAS单点登录-客户端集成(shiro、springboot、jwt、pac4j)(十)
- CAS 单点登录实战 (3) Client端
- CAS单点登录-Cas-Management(八)
- 基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
- cas server + cas client 单点登录 原理介绍
- cas server +cas client 单点登录配置实例
- cas 单点登录(SSO)实验之二: cas-client
- <学习笔记>cas server + cas client 单点登录 原理介绍
- <学习笔记>cas server + cas client 单点登录 原理介绍
- cas server + cas client 单点登录 原理介绍
- 基于CAS实现单点登录(SSO):cas client端的退出问题
- (原创)LDAP与CAS单点登录集成
- SQL语言中 执行语句 DESC与DESCRIBE有什么区别?
- 给设计团队管理者的6个建议
- Python 连接 MySQL
- JDBC之PreparedStatement接口
- Java:String、StringBuffer和StringBuilder的区别
- CAS单点登录-客户端集成(cas-client)(九)
- 习题 7.14 输入10个学生5门课的成绩,分别用函数实现下列功能:
- 几种服务器端IO模型的简单介绍及实现
- 6个策略让你的表单设计更美好
- 浅谈RecyclerView性能问题 滑动卡顿 界面闪动
- 2、搭建Solr服务器
- Linux命令
- Qt 学习之路 2(35):文件
- android读取 AndroidManifest.xml 中的数据