spring security 核心 --过滤器

spring security 核心 --过滤器,第1张

Table 2. 标准过滤器别名和顺序

你可以添加自己的过滤器到列表中,使用custom-filter过滤元件和这些名字来指定你的过滤器应该出现在的位置之一:

<http>

<custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" />

</http>

<beans:bean id="myFilter" class="com.mycompany.MySpecialAuthenticationFilter"/>

你也可以使用after和before属性来让你的过滤器插入到列表中的其他过滤器的前面和后面。FIRST和LAST可以用在position属性来设置你希望将你的过滤器插入到整个列表的前面或者后面。

1、延迟加载过滤器

  Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的 *** 作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。

  Spring 为此专门提供了一个 OpenSessionInViewFilter 过滤器,它的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的 *** 作。

<filter> 

    <filter-name>hibernateFilter</filter-name> 

    <filter-class> 

    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 

    </filter-class> 

 </filter> 

 <filter-mapping> 

    <filter-name>hibernateFilter</filter-name> 

    <url-pattern>*.html</url-pattern> 

 </filter-mapping>

2、乱码过滤器

对post乱码的处理,如下

<filter> 

    <filter-name>encodingFilter</filter-name> 

    <filter-class> 

        org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器

    </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> ② 过滤器的匹配 URL 

        <filter-name>encodingFilter</filter-name> 

        <url-pattern>*.html</url-pattern> 

    </filter-mapping>

3、请求跟踪日志过滤器

程度调试者可以详细地查看到有哪些请求被调用,请求的参数是什么,请求是否正确返回等信息,需要将log4j设为debug

org.springframework.web.filter.ServletContextRequestLoggingFilter: 该过滤器将请求的 URI 记录到 Common 日志中

4、WebAppRootListener

可以将 Web 应用根目录添加到系统参数中,对应的属性名可以通过名为“webAppRootKey”的 Servlet 上下文参数指定,默认为“webapp.root”,配置如下

<context-param> 

    <param-name>webAppRootKey</param-name> 

    <param-value>baobaotao.root</param-value> ① Web 应用根目录以该属性名添加到系统参数中

 </context-param> 

② 负责将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中

 <listener> 

    <listener-class> 

    org.springframework.web.util.WebAppRootListener 

    </listener-class> 

 </listener>

5、Log4jConfigListener 监听器

包括了 WebAppRootListener 的功能,也就是说,Log4jConfigListener 会自动完成将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中,在log4j.xml可以直接使用

6、Introspector 缓存清除监听器

负责处理由 JavaBean Introspector 功能而引起的缓存泄露。IntrospectorCleanupListener 监听器在 Web 应用关闭的时会负责清除 JavaBean Introspector 的缓存,在 web.xml 中注册这个监听器可以保证在 Web 应用关闭的时候释放与其相关的 ClassLoader 的缓存和类引用。

它是基于Servlet 技术实现的, 简单的来说,过滤器就是起到过滤的作用,在web项目开发中帮我们过滤一些指定的 url做一些特殊的处理。

过滤掉一些不需要的东西,例如一些错误的请求。

也可以修改请求和相应的内容。

也可以拿来过滤未登录用户。

过滤器(filter)有三个方法,其中初始化(init)和摧毁(destroy)方法一般不会用到,主要用到的是doFilter这个方法。

如果过滤通过,则在doFilter执行 filterChain.doFilter(request,response)

自定义Filter有两种实现方式,第一种是使用@WebFilter,第二种是使用 FilterRegistrationBean

@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6703750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存