OSChina 的 全局过滤器源码

红薯 发布于 2010/05/25 18:25
阅读 1K+
收藏 15

源码如下,源码中的 RequestContext 代码请看这里

package my.mvc;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import my.db.DBManager;

/**
 * 全局过滤器
 * @author Winter Lau
 * @date 2010-1-13 下午08:36:18
 */
public class ControllerFilter implements Filter {

	private ServletContext context;
	
	/**
	 * 过滤器初始化
	 */
	public void init(FilterConfig cfg) throws ServletException {
		this.context = cfg.getServletContext();
	}

	/**
	 * 执行过滤操作
	 */
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
		throws IOException, ServletException 
	{
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)res;
		RequestContext rc = RequestContext.begin(this.context, request, response);
		
		if(rc.uri().indexOf("/.svn/")>=0){
			rc.forbidden();
			return ;
		}

		try{
			chain.doFilter(rc.request(), rc.response());
		}finally{
			if(rc!=null) rc.end();
			DBManager.closeConnection();
		}
	}

	/**
	 * 过滤器释放资源
	 */
	public void destroy() {
	}

}

很多人很好奇,但其实真的没有任何特殊之处,呵呵

加载中
0
ibc789
ibc789

学习了,收藏了

0
zhengtao620
zhengtao620

前辈,您好,问一下43行的rc.uri().indexOf("/.svn/")>=0是什么意思?

0
红薯
红薯

引用来自#3楼“zhengtao620”的帖子

前辈,您好,问一下43行的rc.uri().indexOf("/.svn/")>=0是什么意思?

我的项目中有一些svn版本控制的信息,不让访问,才有这么一行代码。

0
大东哥
大东哥

引用来自#4楼“红薯”的帖子

引用来自#3楼“zhengtao620”的帖子

前辈,您好,问一下43行的rc.uri().indexOf("/.svn/")>=0是什么意思?

我的项目中有一些svn版本控制的信息,不让访问,才有这么一行代码。

不放到apache或都ngix上控制?感觉加了这行,很杀优雅的风景啊。

0
红薯
红薯

引用来自#5楼“东明”的帖子

引用来自#4楼“红薯”的帖子

引用来自#3楼“zhengtao620”的帖子

前辈,您好,问一下43行的rc.uri().indexOf("/.svn/")>=0是什么意思?

我的项目中有一些svn版本控制的信息,不让访问,才有这么一行代码。

不放到apache或都ngix上控制?感觉加了这行,很杀优雅的风景啊。

的确如此,老代码了,一直没去动它

0
zhengtao620
zhengtao620

哈哈,我又有问题了,为什么获取连接是Configurations.getConnection();而关闭要DBManager.closeConnection();?里面有什么窍门吗?为什么不放到一个里面?

0
红薯
红薯

引用来自#7楼“zhengtao620”的帖子

哈哈,我又有问题了,为什么获取连接是Configurations.getConnection();而关闭要DBManager.closeConnection();?里面有什么窍门吗?为什么不放到一个里面?

因为发布这两个代码的时间不同,中间做了一次重构,最终的版本是数据库操作都归 DBManager 类了。

这下你没问题了吧?哈哈

0
jobell
jobell

DBManager这个类的代码能不能拿出来晒一晒啊!

0
alexhaifeng
alexhaifeng

红薯 大哥,你干脆总结一套分享一下

0
红薯
红薯

引用来自#10楼“alexhaifeng”的帖子

红薯 大哥,你干脆总结一套分享一下

没这方面的准备哦,主要之前很多人对oschina的代码感兴趣,就发了一些跟架构相关,跟具体应用无关的类上来。

返回顶部
顶部