单点登录(二):原理代码分析

本文详细介绍了Spring MVC中cas-servlet.xml的加载时机,以及在单点登录(SSO)系统中,webflow如何与springMVC集成。当请求路径为'login'时,请求由springMVC转交给webflow处理。同时,文章讲解了webflow中视图的定义和解析机制,通过ResourceBundleViewResolver将jsp映射为视图名称,完成视图解析工厂的配置。
摘要由CSDN通过智能技术生成
主要分析:
用户第一次发送请求--->CAS客户端转发至CAS服务器---->CAS服务器返回登录页--->用户登录(输入帐号密码)发送至CAS服务器----->CAS服务器认证------>重定向目标资源。

一.用户第一次发送请求----->CAS客户端转发
     1.1 用户首次访问,过滤器拦截
     1.2 过滤器doFilter()具体操作
     1.3 过滤器转发操作
     1.4 请求路径
二.CAS客户端转发---->CAS服务器返回登录页
     2.1 请求交给springmvc来进行处理
     2.2 springmvc 把请求交给工作流Webflow进行处理
     2.3工作流处理请求流程
三.用户登录(输入帐号密码)发送----->CAS服务器认证
     3.1 login-webflow.xml 指定类进行处理
     3.2 AuthenticationViaFormAction的具体认证过程
四.CAS服务器认证------>重定向目标资源

一.用户第一次发送请求----->CAS客户端转发
1.1 用户首次访问,过滤器拦截
用户第一次访问子系统A的时候,由于在子系统A配置了过滤器,所以首先会对请求进行拦截,如下web.xml代码:
            <filter>
                <filter-name>CAS Filter</filter-name>
                <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
                <init-param>
                    <param-name>casServerLoginUrl</param-name>
                    <param-value>https://iot:8443/casServer/login</param-value>
                </init-param>
                <init-param>
                    <param-name>serverName</param-name>
                    <param-value>http://iot:18080</param-value>
                </init-param>
            </filter>
            <filter-mapping>
                <filter-name>CAS Filter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>

1.2 过滤器doFilter()具体操作
org.jasig.cas.client.authentication.AuthenticationFilter类中,执行其doFilter()方法。在该方法中,判断是系统存在其对的session,如果存在,则不转发至CAS服务器中,如下代码:
        final HttpSession session = request.getSession(false);
        final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null;
        if (assertion != null) {
            filterChain.doFilter(request, response);
            return;
        }

1.3 过滤器转发操作
3.如果不存在的话,进行转发,与此同时,把用户请求的网址附带一起发送给CAS服务器,如下doFilter()中的代码:
final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway);
response.sendRedirect(urlToRedirectTo);

如图所示:

1.4 请求路径
该urlToRedirectTo路径究竟是哪个呢?
我们可以看到在 AuthenticationFilter类中有一个this.casServerLoginUrl的变量,在AuthenticationFilter类中,也就是我们的过滤器处理类中,有initInternal()方法,该方法看字面意思是一个初始化的方法,里面有一个setCasServerLoginUrl(getPropertyFromInitParams(filterConfig, "casServerLoginUrl", null));方法,该方法
该方法里面的getPropertyFromInitParams(filterConfig, "casServerLoginUrl", null);看到filterConfig变量,根据过滤器的的知识,我们就可以知道,是用filterConfig来取web.xml中的初始化变量,再回顾上面的web.xml文件,配有变量
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
           
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值