- 浏览: 279604 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xlhtc007:
这篇文章写得不错!有空了好好学习一下你分享的这本书!
深入:FLASH视频播放传输方式——渐进式与流式 -
jelver:
不错,最近也在整cas
CAS单点登录连接超时解决办法及原因分析 -
bjlfp:
org.jasig.cas.authentication.ha ...
phpBB开源论坛单点登录整合 -
bjlfp:
先谢谢了!
phpBB开源论坛单点登录整合 -
iRoyce:
bjlfp 写道
cas server 端怎么配阿&n ...
phpBB开源论坛单点登录整合
Tapestry 4下扩展Yale CAS Java client filter
最近在研究Yale CAS,因为其Java客户端采用Filter来实现单点登录SSO(其他客户端像ASP,PHP应该也类似),以便当过滤器匹配到受保护的URL时,若发现用户没有登录,就重定向到登录中心进行登录。在Tapestry 4中以及Tapestry 3中,URL的层级结构都需要配置层级式的页面逻辑名、如admin/editPerson.page,Tapestry 5默认出现了层级结构,但还没到版本发布的时候,在此就Tapestry 4应用,通过一种变相的形式实现其SSO过滤器,主要应用于先前没有配置好层级结构的页面逻辑名且重构页面逻辑名较难的应用。
环境:cas-server-3.0.7-rc2 cas-client-java-2.1.1 Tapestry 4 Tomcat 5.0.28
第一步:扩展org.apache.tapestry.ApplicationServlet。
java 代码
- package com.demo.sso;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import org.apache.tapestry.ApplicationServlet;
- /**
- * 功能描述: 重载初始化函数,保存Tapestry4注册类对象的key到全局application对象中
- *
- * @author iroyce Created on d2007-4-29w
- */
- public class SSOApplicationServlet extends ApplicationServlet {
- private static final long serialVersionUID = -1234455546455555444L;
- /** Tapestry4注册类(RegistryImpl)对象、也就是infrastructure, 其在application map变量里的key前缀*/
- private static final String REGISTRY_KEY_PREFIX = "org.apache.tapestry.Registry:";
- /** Tapestry4注册类(RegistryImpl)对象key*/
- public static String REGISTRY_KEY = null;
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- String name = config.getServletName();
- REGISTRY_KEY = REGISTRY_KEY_PREFIX + name;
- }
- }
第二步:扩展cas-client-java-2.1.1中的edu.yale.its.tp.cas.client.filter.CASFilter。
java 代码
- package com.demo.sso;
- import java.io.IOException;
- import java.util.StringTokenizer;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.hivemind.impl.RegistryImpl;
- import org.apache.tapestry.services.ApplicationGlobals;
- import org.apache.tapestry.services.ServiceConstants;
- import org.apache.tapestry.spec.IApplicationSpecification;
- import edu.yale.its.tp.cas.client.filter.CASFilter;
- /**
- * 功能描述: CAS java client在Tapestry 4 下的扩展
- *
- * @author iroyce Created on d2007-4-30
- */
- public class MyCASFilter extends CASFilter {
- /** 受保护的路径配置名,其值以空格或换行作为间隔*/
- public final static String FILTERED_PATHS_INIT_PARAM = "com.demo.sso.filteredPaths";
- /** 受保护的路径*/
- private String filteredPaths = null;
- /** Tapetry应用的配置*/
- private static IApplicationSpecification spec = null;
- public void init(FilterConfig config) throws ServletException {
- super.init(config);
- //配置受保护的路径
- this.filteredPaths = config.getInitParameter(FILTERED_PATHS_INIT_PARAM);
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain fc) throws ServletException, IOException {
- if (!(request instanceof HttpServletRequest))
- throw new ServletException("CASFilter protects only HTTP resources");
- HttpServletRequest hsr = (HttpServletRequest) request;
- if (hsr.getSession() == null) {
- fc.doFilter(request, response);
- return;
- }
- //得到Tapestry的页面配置
- if(spec==null){
- RegistryImpl _registry = (RegistryImpl) hsr.getSession().getServletContext().getAttribute(
- SSOApplicationServlet.REGISTRY_KEY);
- ApplicationGlobals _globals = (ApplicationGlobals) _registry.getService(
- "tapestry.globals.ApplicationGlobals", ApplicationGlobals.class);
- this.spec = _globals.getSpecification();
- }
- //得到当前请求的页面名并判断是否是受保护的资源
- if (spec != null) {
- String pageName = hsr.getParameter(ServiceConstants.PAGE);
- if(pageName==null){
- String url = hsr.getRequestURI();
- int start = url.lastIndexOf('/');
- int end = url.lastIndexOf('.');
- pageName = url.substring(start+1, end);
- if(pageName==null)
- pageName = "Home";
- }
- String pagePath = spec.getPageSpecificationPath(pageName);
- StringTokenizer filteredPaths = new StringTokenizer(this.filteredPaths);
- boolean isFilter = false;
- while(filteredPaths.hasMoreTokens()){
- String filteredPath = filteredPaths.nextToken();
- if(pagePath.indexOf(filteredPath)!=-1){
- isFilter = true;
- break;
- }
- }
- //如果当前不是在拦截的目录之内
- if(!isFilter){
- fc.doFilter(request, response);
- return;
- }
- }
- //进入CAS client的SSO过程
- super.doFilter(request, response, fc);
- }
- }
第三步:修改WEB-INF/web.xml配置。
xml 代码
- <filter>
- <filter-name>redirectfilter-name>
- <filter-class>org.apache.tapestry.RedirectFilterfilter-class>
- filter>
- <filter-mapping>
- <filter-name>redirectfilter-name>
- <url-pattern>/url-pattern>
- filter-mapping>
- <filter>
- <filter-name>CASFilterfilter-name>
- <filter-class>com.demo.sso.MyCASFilterfilter-class>
- <init-param>
- <param-name>edu.yale.its.tp.cas.client.filter.loginUrlparam-name>
- <param-value>https://www.royce.com:8443/cas/loginparam-value>
- init-param>
- <init-param>
- <param-name>edu.yale.its.tp.cas.client.filter.validateUrlparam-name>
- <param-value>https://www.royce.com:8443/cas/proxyValidateparam-value>
- init-param>
- <init-param>
- <param-name>edu.yale.its.tp.cas.client.filter.serverNameparam-name>
- <param-value>127.0.0.1:8080param-value>
- init-param>
- <init-param>
- <param-name>com.demo.sso.filteredPathsparam-name>
- <param-value>
- admin/
- pageadvisor/
- param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>CASFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
- <servlet>
- <servlet-name>tshservlet-name>
- <servlet-class>com.demo.sso.SSOApplicationServletservlet-class>
- <load-on-startup>0load-on-startup>
- servlet>
- <servlet-mapping>
- <servlet-name>tshservlet-name>
- <url-pattern>/appurl-pattern>
- servlet-mapping>
- <servlet-mapping>
- <servlet-name>tshservlet-name>
- <url-pattern>*.pageurl-pattern>
- servlet-mapping>
评论
2 楼
iRoyce
2007-05-01
Very Sorry! 确实有, 看来本例只能用到页面逻辑名没有配置层级结构的系统了!!
1 楼
dengyin2000
2007-05-01
TAPESTRY4中怎么没有层级结构。admin/editPerson.page
tapestry4中是有的。
tapestry4中是有的。
发表评论
-
Tapestry 5 页面生命周期方法
2007-04-21 09:25 4871页面生命周期方法 本文根据http://tapestry. ... -
Tapestry 5组件事件
2007-04-01 00:09 7851Tapestry 5组件事件 本 ... -
Tapestry 5 输入验证
2007-03-22 16:00 6158Tapestry 5输入验证 本文根据http://tap ... -
Tapestry 5 页面导航
2007-03-16 23:50 5674Tapestry 5 页面导航 本文根据http:// ... -
获取Tapestry5学习资源——Maven与SVN
2007-03-16 14:09 6626获取Tapestry 5学习资源 ... -
Tapestry 5 组件参数
2007-03-15 08:55 4710Tapestry 5 组件参数 本文根据http:// ... -
Tapestry 5 组件模板
2007-03-15 00:02 5699Tapestry 5 组件模板 本文根据http:// ... -
Tapestry 5 组件类
2007-03-13 11:44 6343Tapestry 5 组件类 本文档根据 http://t ... -
Tapestry 5简介
2007-03-05 17:47 6010Tapestry 5简介 本文是在Tapestry官方文档的基 ... -
Tapestry页面国际化实现方式——权衡效率
2007-02-17 17:18 3621Tapestry国际化实现方式 ——权衡效率 在Tapest ... -
Annotation与Tapestry4.0页面拦截
2006-12-05 17:45 4522<o:p> </o:p> 在Tapes ...
相关推荐
Tapestry简单入门介绍,包含Tapestry入门、tapestry组件介绍
Tapestry4的雏形是Tapestry3.1,Tapestry的作者Howard,不光开发了Tapestry,还同时开发了一个轻量级框架Hivemind。所以Tapestry3.1的开发一开始就处于Hivemind框架之下。后来由于种种原因,Howard没有将Tapestry3.1...
Tapestry 4 官方文档中版本 Tapestry 4 官方文档中版本 Tapestry 4 官方文档中版本
Tapestry4 Tapestry4 深入浅出Tapestry4深入浅出Tapestry4深入浅出Tapestry4
Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar
tapestry4开发指南,一本很实用的书籍,适合初学者
Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html...
Tapestry4开发指南,环境搭建和基本应用
该包包含: Tapestry5最新中文教程.doc tapestry.pdf tapestry开发流程.docx Tapestry开发指南0.8.pdf tapestry用户手册.pdf
Apache Tapestry是一个开源且基于组件的Web应用框架,主要用于创建高度可扩展的JavaApache Tapestry是一个开源且基于组件的Web应用框架,主要用于创建高度可扩展的Java Web应用程序。这个框架是由Howard Lewis Ship...
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
tapestry5.2.6 最新jar包,Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层
Tapestry in action 作者最新作品,包含Tapestry 5.2
本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web..., 本书适合Web框架技术的爱好者、Tapestry入门学习者、Tapestry表现层开发人员和关注下一代的Web开发技术的公司与个人用户。
Tapestry 4 官方文档中文版本,现在中文资料比较少,和大家共享一下
深入浅出Tapestry4一书源代码 需要自己调试
基于Tapestry4,jdk1.5开发的入门例子