JAVA CAS单点登录之三:CAS代理模式演练
前言
代理模式相相对上一节的普通模式,更加复杂了。但配置起来也会稍微有些差别。所谓难者不会,会者不难。如果遇到一个从来没有遇到的问题,解决起来也是非常棘手的,当然解决之后就不是事了。我就遇到了一个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机制都是一个不得不掌握的知识点。这篇文章主要是从出现的原因再到原理进行一个解析。希望对你有所帮助。
相关文章
- java反射与代理模式
- java Proxy(代理机制)
- Java实现 LeetCode 467 环绕字符串中唯一的子字符串
- Java实现高效便捷还容易懂的排序算法
- java实现第五届蓝桥杯幂一矩阵
- java实现Floyd算法
- Java实现字符串匹配
- Java实现算法提高十进制数转八进制数
- Java反射与动态代理
- Java_Mybatis_注解代理写法
- Java_myBatis_XML代理_延迟加载
- 【JAVA】Mac下查看已安装的jdk版本及其安装目录
- 杨晓峰-Java核心技术-6 动态代理 反射 MD
- java动态代理的两种方法
- Java_myBatis_XML代理_动态SQL
- Java_myBatis_XML代理_延迟加载
- Java静态代理和动态代理
- Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
- Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
- Atitit.http代理的实现 代码java php c# python
- Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
- java代理模式
- Java使用代理Proxy访问网络及其验证
- 【项目实战】使用Java Keytool工具生成的CSR给第三方云平台签名
- 【java】CGLIB动态代理原理
- 【java】JDK动态代理原理