`
raymond.chen
  • 浏览: 1437019 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring常用的过滤器

 
阅读更多

1、CharacterEncodingFilter

        该过滤器可以很方便的为我们解决项目中出现的中文乱码问题。只需在web.xml文件中配置一下该过滤器,设置两个参数(encoding和forceEncoding)即可。

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>
		org.springframework.web.filter.CharacterEncodingFilter
	</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>

<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

      其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式。

 

2、OpenSessionInViewFilter

        当hibernate+spring配合使用的时候,如果设置了lazy=true,那么在读取数据的时候,当读取了父数据后,hibernate会自动关闭session,这样,当要使用子数据的时候,系统会抛出lazyinit的错误。

 

        Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session已经关闭,这些导致延迟加载数据的访问异常。而Spring为我们提供的OpenSessionInViewFilter过滤器为我们很好的解决了这个问题。

 

        在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。 

1。

 

        OpenSessionInViewFilter调用流程: 

                request(请求) -> open session并开始transaction -> controller -> View(Jsp) -> 结束transaction并close session

 

        如果流程中的某一步被阻塞的话,那在这期间connection就一直被占用而不释放。当大量这样的情况出现时,就有连接池连接不足,造成页面假死现象。OpenSessionInViewFilter是个双刃剑,放在公网上内容多流量大的网站请慎用。

       web.xml配置OpenSessionInViewFilter如下(如果使用struts,此监听器应该在struts的监听器前面):

<filter>  
	<filter-name>hibernateFilter</filter-name>  
	<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
	<!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->  
	<init-param>  
		<param-name>singleSession</param-name>  
		<param-value>true</param-value>  
	</init-param> 
	
	<init-param>  
		<param-name>flushMode</param-name>  
		<param-value>AUTO</param-value>  
	</init-param> 
</filter>  

<filter-mapping>  
	<filter-name>hibernateFilter</filter-name>  
	<url-pattern>/*</url-pattern>  
</filter-mapping>

      OpenSessionInViewFilter 在把session绑在当前线程上的时候,会把session的flush mode 设为FlushMode.NEVER,因此,如果某个方法没有事务或者有只读事务,则不能对session做insert,update,delete操作,除非事先把session的flush mode手动设为auto

 

分享到:
评论

相关推荐

    Spring 各种过滤器配置大全

    FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring Ioc的功能, CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 定义url比较前先转为小写 PATTERN_TYPE_APACHE_ANT 定义使用Apache ant的匹配模式

    全面解析Spring Security 过滤器链的机制和特性

    Spring Security 过滤器链机制和特性详解 Spring Security 过滤器链是 Spring Security 框架中的一种核心机制,负责处理 HTTP 请求的安全验证和授权。今天,我们将深入探讨 Spring Security 过滤器链的机制和特性,...

    spring-boot 过滤器 filter

    总结,Spring Boot的过滤器机制提供了强大的请求处理能力,开发者可以根据需求创建并配置过滤器,实现各种定制化的操作。通过合理利用过滤器,可以提升应用的安全性、性能和用户体验。在实际开发中,应根据具体场景...

    spring mvc过滤器实现

    spring mvc 过滤器,实现url过滤,权限模块经常用到的,很不错

    spring security 4 小例子带自定义过滤器

    在Spring Security 4中,我们可以通过自定义过滤器来扩展其功能,以满足特定的安全需求。在这个小例子中,我们将探讨如何创建并集成自定义过滤器,以及它在Spring Security中的工作原理。 首先,我们需要理解Spring...

    springcloud getaway 全局过滤器.doc

    本文将深入探讨如何在Spring Cloud Gateway中自定义全局过滤器。 首先,我们需要了解Spring Cloud Gateway的基本架构。Gateway基于Spring Framework 5、Project Reactor和Spring WebFlux构建,它提供了一种高效且...

    spring+security+11种过滤器介绍.doc

    1. HttpSessionContextIntegrationFilter:这是Spring Security过滤器链的第一个过滤器。它的主要职责是确保每个线程都有一个SecurityContext实例,这个实例存储了当前用户的认证信息。当请求到达时,它检查session...

    Spring Security常用过滤器实例解析

    Spring Security 常用过滤器实例解析 Spring Security 是一个功能强大且灵活的安全框架,提供了许多实用的过滤器来帮助我们实现身份验证、授权和保护我们的应用程序。下面我们将介绍 15 个常用的 Spring Security ...

    21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

    在Spring Boot框架中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们可以帮助我们实现一些自定义的处理逻辑,如数据校验、日志记录、请求拦截等。下面将详细讲解这两个概念及其在实际开发中的...

    过滤器 spring4.1+jdk1.8版本

    本资源提供了基于Spring 4.1和Java 8 (JDK1.8) 的过滤器实现,包括必要的jar包和实例代码,这对于理解如何在实际项目中使用过滤器具有很高的参考价值。 首先,我们需要了解过滤器的基本工作原理。过滤器是实现了 ...

    关于ip的过滤器 spring security例子

    本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。 首先,我们需要理解Spring Security的基本架构。它是一个多层次的组件模型,其中包括认证、授权和会话管理等核心功能。在...

    springcloud gateway 全局过滤器统一签名判定.doc

    在Spring Cloud Gateway中,全局过滤器(Global Filter)是一种强大的机制,用于在请求路由到具体的服务之前或之后执行通用的处理逻辑。在这个场景中,我们关注的是如何利用全局过滤器来实现统一的签名验证,这在...

    spring过滤器

    本篇将深入探讨"Spring过滤器",以及如何利用它来实现网站的过滤功能。 首先,过滤器是Java Servlet规范的一部分,用于在请求被Servlet处理之前或之后执行一些预处理或后处理操作。在Spring框架中,我们通常使用...

    过滤器 spring4.1+jdk1.7版本

    在这个"过滤器 spring4.1+jdk1.7版本"的压缩包中,我们关注的是如何在Spring 4.1框架下利用过滤器功能,以及与Java 7(JDK 1.7)的兼容性。 1. **过滤器基础**: 过滤器在Java Web应用中主要用来拦截和处理HTTP...

    spring常用架包

    9. **Spring Web**:该模块提供了创建基于HTTP请求的应用程序的支持,如Servlet监听器、过滤器等,是Spring MVC的基础。 10. **Spring Test**:测试支持模块,包含JUnit和TestNG集成,方便进行单元测试和集成测试。...

    Spring常用的jar包.rar

    6. **spring-web.jar** 和 **spring-webmvc.jar**:前者提供了HTTP请求的处理,如Servlet监听器、过滤器等;后者是Spring MVC,用于构建Web应用,提供模型-视图-控制器架构,支持RESTful风格的URL路由、数据绑定、...

    SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    在Java Web开发中,Spring MVC框架提供了两种机制来处理请求:拦截器(Interceptor)和过滤器(Filter)。它们都是在请求被控制器处理之前和之后执行的一系列预处理和后处理操作,但它们在功能、使用场景和工作原理...

    spring boot过滤器FilterRegistrationBean实现方式

    "Spring Boot 过滤器 FilterRegistrationBean 实现方式" 在 Spring Boot 应用程序中,过滤器是一个非常重要的组件,它可以对请求和响应进行过滤、修改和拦截。在 Spring Boot 中,使用 FilterRegistrationBean 可以...

Global site tag (gtag.js) - Google Analytics