Spring过滤器的targetFilterLifecycle作用
Spring过滤器在web.xml中进行配置,对URL请求进行过滤,链式处理。配置分为两种A和B。
A:普通配置在web.xml中增加如下内容:
<filter>
<filter-name>authFilter</filter-name>
<filter-class>com.lan16.weixin.filter.AuthFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
B:高级配置(允许代理注入SpringBean)在web.xml中增加如下内容:
<filter>
<filter-name>authFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
在springBean配置中加入:
<bean id="authFilter" class="com.lan16.weixin.filter.AuthFilter">
<property name="service" ref="service"/>
</bean>
因为Filter比Bean先加载,也就是Spring会先加载Filter指定的类到Container中,这样Filter中注入的Spring Bean就为null了。
解决办法:
先Filter中加入DelegatingFilterProxy类,"targetFilterLifecycle"指明作用于Filter的所有生命周期。原理是DelegatingFilterProxy类是一个代理类,所有的请求都会首先发到这个Filter代理,然后再按照"filter-name"委派到Spring中的这个Bean。在Spring中配置的Bean的name要和web.xml中的
- 上一篇
Java通过Jedis连接Redis的三种方式的操作工具类
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
- 下一篇
Tomcat 启动时 SecureRandom 非常慢解决办法
最近使用阿里云的 Ubuntu 16.04 ESC服务器运行 Tomcat时发现,Tomcat启动的特别慢,通过查看日志,发现时间主要花在实例化 SecureRandom对象上了。实例化该对象使用了253秒,导致整个应用启动了275秒之久。