zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JAVA CAS单点登录之三:CAS代理模式演练

JAVA代理模式 登录 单点 之三 CAS 演练
2023-09-14 09:01:03 时间

前言

 JAVA CAS单点登录之一:搭建CAS服务器    

JAVA CAS单点登录之二:CAS普通模式1演练    

代理模式相相对上一节的普通模式,更加复杂了。但配置起来也会稍微有些差别。所谓难者不会,会者不难。如果遇到一个从来没有遇到的问题,解决起来也是非常棘手的,当然解决之后就不是事了。我就遇到了一个CAS 坑爹的错误。一步步按照别人的博客坐下来,普通模式部署没有多大问题,就是不知道为什么代理模式总是出错,搜遍了整个网络,也没找到问题所在,我就纳闷了,为什么就没有人 遇到过呢。还好,最后我使用了杀手锏,部署源码一步步跟踪找到了问题所在。

主要内容

搭建一整套环境.包括(cas-server ,cas proxy client,cas back-end app client)

一共三个Web应用。

具体参数  

涉及的所有参数都在我的实体机(WIN7)完成的。分别按照了3个TOMCAT服务端。


                        property name="description" value="Allows HTTP(S) and IMAP(S) protocols" /
                   Use the following definition instead of the above to further restrict access
                   Note that example.com must be replaced with the domain you wish to permit.
                        property name="description" value="Allows HTTP(S) and IMAP(S) protocols on example.com" /
                        property name="serviceId" value="^(https?|imaps?)://([A-Za-z0-9_-]+\.)*example\.com/.*" /

我就是坑在这里了,坑了近3个晚上。,苦逼啊。现在回想起来真的太傻了。如果没这个插曲,我想CAS我可能又走马观花研究一两个晚上而已,正是这个插曲,燃起了我的斗志,所以也干脆写一个系列吧。


1.2 为了演练方便,修改 deployerConfigContext.xml文件,不需要安全请求。


web-app id="mywebapp" 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"    display-name mywebapp /display-name    !-- Sign out not yet implemented --
           filter-class org.jasig.cas.client.session.SingleSignOutFilter /filter-class
     filter-class org.jasig.cas.client.authentication.AuthenticationFilter /filter-class
     filter-class org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter /filter-class
     filter-class org.jasig.cas.client.util.HttpServletRequestWrapperFilter /filter-class
           listener-class org.jasig.cas.client.session.SingleSignOutHttpSessionListener /listener-class

修改的内容如下

1.为Cas20ProxyReceivingTicketValidationFilter增加2个配置元素

    init-param
        param-name proxyCallbackUrl /param-name
        param-value http://zhaoguoyu-pc:8080/proxyClient/proxyCallback /param-value
    /init-param
    init-param
        param-name proxyReceptorUrl /param-name
        param-value /proxyCallback /param-value
    /init-param

2.增加映射URL(注意顺序),一定要在其他filter的前面


         filter-class org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter /filter-class
ProxyTestServlet HttpServlet {

    doPost(HttpServletRequest request, HttpServletResponse response) ServletException, IOException {

        String serviceUrl = "http://hellocas2.com:8070/mywebapp2/protected/";

        Assertion assertion = AssertionHolder.();

        String proxyTicket = assertion.getPrincipal().getProxyTicketFor(serviceUrl);

        URL url = URL(serviceUrl + + proxyTicket);

        HttpURLConnection conn = ;

        {

            conn = (HttpURLConnection) url.openConnection();

            responseCode = conn.getResponseCode();

            String responseMessage = conn.getResponseMessage();

            System..println(+responseCode);

            System..println();

            System..println();

            System..println(responseMessage);

        } (Exception ex) {

            ex.printStackTrace();

        } {

            (conn != ) {

                conn.disconnect();

            }

        }

    }

    doGet(HttpServletRequest request, HttpServletResponse response) ServletException, IOException {

        doPost(request, response);

    }

}

5.测试验证

前提:分别启动CAS-server,Cas-proxy,Cas-backend client

5.1 输入地址,http://zhaoguoyu-pc:8080/proxyClient。

5.2 输入用户名和密码

5.3 访问servlet

http://zhaoguoyu-pc:8080/proxyClient/proxyTestServlet

经过确认,反悔代码为200,和OK。表示测试通过。


如果想详细链接关于代理模式的原理,请参考

http://my.oschina.net/ichatter/blog/129642

http://blog.csdn.net/emon123/article/details/6285549

http://www.blogjava.net/security/archive/2006/04/26/SSO_CASProxy.html

http://www.myexception.cn/software-architecture-design/644728.html

http://init-life.com/web/2014/11/12/cas-workflows/

http://www.mytju.com/classcode/news_readNews.asp?newsID=503

https://wiki.jasig.org/display/CASC/CAS+Client+for+Java+3.1。


部署期间,我遇到这个坑爹的异常

cas:serviceResponse xmlns:cas=http://www.yale.edu/tp/cas

     cas:authenticationFailure code=service.not.authorized.proxy

        service.not.authorized.proxy

     /cas:authenticationFailure

/cas:serviceResponse

This is because proxy authn is turned off by default. Set the proxy flag in 

your service registry and off it goes.

感觉哪儿少配了个参数,硬是搜遍了大量博客,竟然没找到。最后自己看源码,一步步跟踪出来的。

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/1753244


Java面试题之CAS和ABA问题 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不能被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视为一个整体,资源在该次操作中保持一致,这是原子性的核心特征。
java并发编程中的CAS机制,你理解嘛? 学习Java并发编程,CAS机制都是一个不得不掌握的知识点。这篇文章主要是从出现的原因再到原理进行一个解析。希望对你有所帮助。