`
cywhoyi
  • 浏览: 422021 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

上一篇关于Listener理解成监听信息,那么Valve就是用来过滤信息用的,而最简单以及朴实无华的Valve非org.apache.catalina.valves.AccessLogValve莫属。

AccessLogValve的类图设计



 

自定义的Valve

首先查看下实现ValveBase接口的Valve



 

设计一个固定的ip和地址才能进来valve,如果按照传统方式有一下几种合适的方案

1.可能是在apache、nginx上进行拦截,确实这种方式最容易

2.类似的struts2、springMVC提供这种ip拦截的方案

今天我提供额外的方式,其实只是提供好玩的想法,具体用Vavle能够在那些方面,仁者见仁、智者见智。

 

Tomcat的valve的设计模式就是采用责任链模式,挺好用的设计模式。

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.ServletException;

import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.RequestFilterValve;


public final class EwellBlockAccessByPathValve extends RequestFilterValve {


	private String path;


	private Pattern[] paths;


	@Override
	public String getInfo() {
		return info;
	}

	public String getPath() {
		return path;
	}


	public void setPath(String path) {
		paths = precalculate(path);
		this.path = path;
	}


	@Override
	public void invoke(Request request, Response response) throws IOException,
			ServletException {
		
		System.out.println("---------------EwellBlockAccessByPathValve-----------------");
		String remoteAddr = request.getRemoteAddr();
		String requestedPath = request.getRequestURI();

		boolean pathBlocked = false;


		getNext().invoke(request, response);
	}

}

 



 

 

如何配置呢?类似的配置足矣!

 

     <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

 

 

配置完毕后,运行http://127.0.0.1:8080



 

 

  • 大小: 73.9 KB
  • 大小: 34.7 KB
  • 大小: 11.8 KB
  • 大小: 37.7 KB
3
1
分享到:
评论
2 楼 cywhoyi 2014-06-07  
wwwcomy 写道
这。。。 LZ能不能再写细一点

比如AccessLogValve的具体作用

这个好像在默认server.xml里面是注释掉的,加上有啥效果~

当然可以啦,模仿一个Valve可能产生效果更佳理想
1 楼 wwwcomy 2014-06-06  
这。。。 LZ能不能再写细一点

比如AccessLogValve的具体作用

这个好像在默认server.xml里面是注释掉的,加上有啥效果~

相关推荐

    tomcat-sflow-valve:自动从code.google.comptomcat-sflow-valve导出

    Tomcat Valve使用sFlow( )实现日志记录。 目的是对大型Web群集进行连续,实时的监视。 sFlow机制允许使用sFlow高效的XDR编码UDP“推送”模型来报告URL事务的1-in-N随机样本,以及最重要计数器的定期快照。 可以...

    tomcat7,tomcat8,tomcat9

    Tomcat7支持通过Context元素的`&lt;Valve&gt;`标签动态添加阀门(Valves),这些阀门可以用于日志记录、访问控制等。此外,它还加强了对HTTPS的支持,提供了更灵活的错误页面处理,并且支持部署目录结构的变化,使得应用...

    Tomcat 接口文档 API

    Tomcat是一款广泛使用的开源Java Servlet容器,由Apache软件基金会开发。它实现了Java Servlet和JavaServer Pages(JSP)规范,为Web应用程序提供了一个轻量级、高性能的运行环境。Tomcat API是开发者理解和操作...

    Tomcat深入剖析pdf+源码(Tomcat运行原理)

    6. **连接器与管道**:Coyote连接器负责接收和发送网络数据,管道(Pipeline)则提供了灵活的处理链,允许自定义处理器(Valve)来扩展Tomcat的功能。 7. **部署与热部署**:Tomcat支持自动部署和热部署,只需将WAR...

    tomcat7使用redis管理session需要的jar包

    使用说明: 1、将zip解压出来的jar包放到tomcat的lib目录下. 2、修改tomcat/conf下的context.xml文件,示例如下: &lt;!-- Default set of monitored resources --&gt; &lt;WatchedResource&gt;WEB-INF/web.xml &lt;!-- ...

    tomcat7.0.42源码,eclipse直接使用

    【标题】"Tomcat7.0.42源码,eclipse直接使用" 【内容】: Tomcat7.0.42是Apache Tomcat服务器的一个版本,它是一个开源的Java Servlet容器,主要用于实现Java Servlet和JavaServer Pages(JSP)技术。这个版本的...

    Tomcat 8 权威指南

    最后,书中可能还会涵盖一些高级主题,比如集成Spring框架、使用Tomcat Valve组件进行自定义处理,以及如何为Tomcat编写插件。这些内容对于有经验的开发者来说,可以进一步提升他们的技术水平。 总之,《Tomcat 8 ...

    tomcat服务器的配置详解

    例如,通过调整`maxProcessors`可以控制处理线程的数量,以平衡资源使用和响应速度;`connectionTimeout`可以设置客户端无响应时的超时时间,防止资源被长时间占用。 总之,Tomcat的配置是一个细致且关键的工作,每...

    tomcat源码

    2. **线程池管理**:Tomcat如何使用Executor(`Executor`接口和`ThreadPoolExecutor`实现)来管理线程,提高并发性能。 3. **会话管理**:Tomcat如何实现Session跟踪,包括Cookie、URL重写和基于数据库的持久化策略...

    spring boot项目和vue一起放在tomcat部署

    我们可以使用 Spring Boot 项目作为后端 API 服务器,而使用 Vue 作为前端应用程序。这种架构模式可以使我们的应用程序更加灵活和高效。 Tomcat 服务器的配置 Tomcat 服务器是 Apache 软件基金会开发的一个开源的 ...

    tomcat跨域访问问题

    4. **使用Tomcat的CORS Valve**:Tomcat 7.0.53及以上版本提供了CORS Valve,可以在server.xml的Host或Context元素中配置: ```xml &lt;Valve className="org.apache.catalina.valves.CorsValve" ...

    Tomcat-9.0-API

    Tomcat-9.0-API 是针对Apache Tomcat 9.0版本的官方应用程序接口(API)文档,它提供了开发者们详细的技术指南,用于理解并使用Tomcat服务器的核心功能。Tomcat是一个广泛使用的开源Java Servlet容器,它实现了Java ...

    apache-tomcat-7.0.100

    10. **扩展性**:Tomcat支持通过添加Valve组件来扩展其核心功能,Valve是处理请求的组件,可以在请求生命周期的不同阶段介入。此外,还可以通过JMX(Java Management Extensions)来管理和监控Tomcat实例。 总结来...

    tomcat常见问题及解决方法

    然而,在使用 Tomcat 的过程中,开发者经常会遇到一些常见的问题,本文将列举一些常见的问题和解决方法,旨在帮助开发者更好地使用 Tomcat。 1. 如何加载一个属性文件? 加载属性文件是 Tomcat 中的一项常见操作,...

    tomcat8 windows版

    6. **扩展性**:通过Connector(连接器)和Valve(阀门)机制,Tomcat8可以轻松地与其他组件集成,例如实现负载均衡、安全控制等功能。 在实际开发中,为了确保Tomcat8在Windows上稳定运行,我们需要注意以下几点:...

    tomcat源码 tomcat本来就是开源的

    此外,该网站也提供了相关的文档和技术支持,帮助开发者更好地理解和使用Tomcat。 #### 三、Tomcat源码价值 对于希望深入了解Tomcat内部机制或者定制化开发的开发者而言,研究其源码具有重要的意义: 1. **学习...

    《深入剖析 Tomcat》PDF版本下载.txt

    - **Valve**:Valve是容器级别的扩展点,可以通过配置文件添加自定义逻辑到Tomcat的处理流程中。 ### 三、Tomcat内部机制 #### 3.1 启动过程 当启动Tomcat时,其核心组件会按照一定的顺序初始化并准备就绪: 1. *...

    基于tomcat的redis配置

    &lt;Valve className="com.orangefunction.tomcat6.redissessions.RedisSessionHandlerValve"/&gt; &lt;Manager className="com.orangefunction.tomcat6.redissessions....

    Apache-tomcat6

    总的来说,Apache Tomcat 6.0是一款广泛使用的Java Web应用服务器,它以其轻量级、高效和开源的特性深受开发者喜爱。尽管现在最新的版本已经更新到Tomcat9,但Tomcat6.0仍然在许多旧项目中发挥作用,对于学习和理解...

Global site tag (gtag.js) - Google Analytics