网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用servlet过滤来实现权限控制     
  文章作者:未知  文章来源:水木森林  
  查看:89次  录入:管理员--2007-11-17  
 
  用servlet过滤来实现权限控制

简介
过滤是servlet2。3规范新有的功能,目前tomcat4,weblogic7都已支持。它能实现很多以前使用不便或很难实现的功能,在a++平台+部件的产品体系中,我们可以很好地使用servlet过滤,使得各个部件可以在保持平台统一权限控制的前提下,来实现各个独自的个性权限系统。
下面先看下servlet过滤是如何工作的,如下图:

图 1. 过滤器与 j2ee 请求处理

由图我们可以看出,servlet过滤是在j2ee平台内web容器中执行,任何静态或动态业务请求都将通过这个过滤通道。

优点
和传统架构相比,servlet过滤的优点如下:
在传统架构中:
? 每次接受到请求,挂钩式方法就被调用,不论它们是否执行(有时甚至是空的)。
? 方法的作用域及并发关系(每个方法可能在不同的线程上被调用)不允许在处理相同的请求时简单、高效地共享不同挂钩式方法调用间的变量和信息。
在servlet过滤中:
? 嵌套的方法调用通过一系列过滤器实现,它仅有应用于当前请求的过滤器组成;基于挂钩式调用的传统执行方式需要在处理短句中调用挂钩式例程,即使一个特定短句的处理逻辑不起任何作用。
? 局部变量在实际的过滤方法返回之前都作保留,并且可用(因为上游过滤器的调用总在堆栈上,等待后续调用的返回)。
过滤的实现
调用链
所有过滤器都服从调用的过滤器链,并通过定义明确的接口得到执行。一个执行过滤器的 java 类必须执行这一 javax.servlet.filter 接口。这一接口含有三个过滤器必须执行的方法:
? dofilter(servletrequest, servletresponse, filterchain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的 filterchain 对象提供了后续过滤器所要调用的信息。
? init(filterconfig):这是一个容器所调用的初始化方法。它保证了在第一次 dofilter() 调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。
? destroy():容器在破坏过滤器实例前,dofilter()中的所有活动都被该实例终止后,调用该方法。
嵌套调用在 dofilter() 方法执行中发生。除非您建立一个过滤器明确阻止所有后续处理(通过其它过滤器及资源处理器),否则过滤器一定会在 dofilter 方法中作以下的调用:
filterchain.dofilter(request, response);

安装过滤器:定义与映射
容器通过 web 应用程序中的配置描述符 web.xml 文件了解过滤器。有两个新的标记与过滤器相关: 和 。应该指定它们为 web.xml 文件内 标记的子标记。
过滤器定义的元素
标记是一个过滤器定义,它必定有一个 和 子元素。 子元素给出了一个与过滤器实例相关的、基于文本的名字。 指定了由容器载入的实际类。您能随意地包含一个 子元素为过滤器实例提供初始化参数。例如,下面的过滤器定义指定了一个叫做 ie filter 的过滤器:
清单 1. 过滤器定义标记

ie filter
com.ibm.devworks.filters.iefilter

容器处理 web.xml 文件时,它通常为找到的每个过滤器定义创建一个过滤器实例。这一实例用来服务所有的可用 url 请求;因此,以线程安全的方式编写过滤器是最为重要的。
过滤器映射及子元素
标记代表了一个过滤器的映射,指定了过滤器会对其产生作用的 url 的子集。它必须有一个 子元素与能找到您希望映射的过滤器的过滤器定义相对应。
我们可以使用 或 子元素来指定映射。 指定了一个过滤器应用的 servlet (在 web.xml 文件中的其它地方已定义)。
注意:在这里我们可以使用 来指定一个该过滤器应用的 url 的子集。例如, /* 的样式用来代表该过滤器映射应用于该应用程序用到的每个 url,/gl/ * 的样式则表明该过滤器映射只应用于总帐专有的 url,而nt/*则表明过滤器只应用于非税专有的url。
容器使用这些过滤器映射来确定一个特定的过滤器是否应参与某个特定的请求。清单 1 是为应用程序的所有 url 定义的应用于 ie filter 的一个过滤器映射:
清单 2. 过滤器映射标记

gl filter
/gl/*

nt filter
/nt/*


package freeview;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

/**
*
title:

*
description:

*
copyright: copyright (c) 2003

*
company: freeview stu.

* @author macken
* @version 1.0
*/

public class ntfilterservlet extends httpservlet implements filter {
private filterconfig filterconfig;
//handle the passed-in filterconfig
public void init(filterconfig filterconfig) {
this.filterconfig = filterconfig;
}

//process the request/response pair
public void dofilter(servletrequest request, servletresponse response, filterchain filterchain) throws servletexception,ioexception {
//权限控制代码
}
//clean up resources
public void destroy() {
}
}
 
 
上一篇: 用servlets动态生成图片    下一篇: 用servlet开发企业级三层web应用(一)
  相关文档
使用特定的包在java中高效处理日志记录 11-17
用过滤器使现有portlet适应新门户应用程序 11-17
java 中文问题 集锦 11-17
成员函数的重载 11-17
sun认证java程序员5.0升级版本 11-17
开发方法之--j2ee架构的6个最佳实践 02-03
axis下 webservice 的调用问题 11-17
实战jboss?d?d教你写第一个ejb 11-16
通用上载组件的原理及实现 11-17
使用netbeans 的五大理由 11-17
rcpii:扩展通用工作台补充—小的改进 11-17
【新手必读】java入门及faq 11-17
getutcminutes 方法 11-16
利用rman转移数据和exp/imp转移的实测比较 11-17
struts 1.2.2 新功能全新体验 11-17
java servlet/jsp多语言解决方案 11-17
struts开发指南之工作流程 11-17
让javame程序真正run anywhere 11-17
通过实例学习java对象的构造过程 11-17
web services&xml:xml和j2ee的完美结合 (1) 10-22
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息