博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cas 认证流程分析
阅读量:5808 次
发布时间:2019-06-18

本文共 3059 字,大约阅读时间需要 10 分钟。

hot3.png

CAS主要分为两部分

CAS Server端: 需单独部署(作统一的认证处理中心),负责用户校验认证功能,认证方式可从XML中检索或从数据库中检索数据进行认证。

CAS Client端:与web应用整合,负责保护web资源,当有请求访问web受保护资源时,将请求重定向到CAS Server端进行用户认证 。

用户请求web应用,cas-client-core中的AuthenticationFilter会拦截请求,doFilter方法根据是否有登录过而决定是否要重定向。

public final void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {    HttpServletRequest request = (HttpServletRequest)servletRequest;    HttpServletResponse response = (HttpServletResponse)servletResponse;    HttpSession session = request.getSession(false);    Assertion assertion = session != null?(Assertion)session.getAttribute("_const_cas_assertion_"):null;    if(assertion != null) {        filterChain.doFilter(request, response);    } else {        String serviceUrl = this.constructServiceUrl(request, response);        String ticket = CommonUtils.safeGetParameter(request, this.getArtifactParameterName());        boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);        if(!CommonUtils.isNotBlank(ticket) && !wasGatewayed) {            this.log.debug("no ticket and no assertion found");            String modifiedServiceUrl;            if(this.gateway) {                this.log.debug("setting gateway attribute in session");                modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl);            } else {                modifiedServiceUrl = serviceUrl;            }            if(this.log.isDebugEnabled()) {                this.log.debug("Constructed service url: " + modifiedServiceUrl);            }            String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, this.getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway);            if(this.log.isDebugEnabled()) {                this.log.debug("redirecting to \"" + urlToRedirectTo + "\"");            }            response.sendRedirect(urlToRedirectTo);        } else {            filterChain.doFilter(request, response);        }    }}

若是首次登录,则会重定向到Cas Server端。Cas Server端的验证配置主要在deployerConfigContext.xml中。

登录认证过程:

用户输入登录资料后,提交至Cas Server端后,Cas Server端会返回一个ticket,及将TGC写入到Cookie中,

浏览器得到ticket后,向Cas Client发起请求(带上ticket),Cas Client端再向Cas Server端请求认证ticket

认证通过后,则Cas Client 端跳转成功页面。

附一张网上找的流程图

 

 

 

 

 

转载于:https://my.oschina.net/WWWW23223/blog/1483805

你可能感兴趣的文章
11.排序算法_6_归并排序
查看>>
Redis redis-cli 命令列表
查看>>
.NET框架设计—常被忽视的框架设计技巧
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
git reset 三种用法总结
查看>>
hdfs笔记
查看>>
虚拟机新增加硬盘,不用重启读到新加的硬盘
查看>>
Java IO流详尽解析
查看>>
邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)...
查看>>
Linux VSFTP服务器
查看>>
DHCP中继数据包互联网周游记
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
项目管理心得
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
通过vb.net 和NPOI实现对excel的读操作
查看>>