filter在spring框架中使用配置文件参数的一种方法
来源:互联网 发布:多益网络 社招 编辑:程序博客网 时间:2024/06/06 05:29
filter在spring框架中使用配置文件参数的一种方法
在这里我是用 springboot 来开发,所以也用springboot来演示
对springboot 配置 filter不熟悉的可以看这篇文章
springboot自定义Filter的使用
那么配置好了 filter,该如何吧配置文件的参数读取出来显示呢?
有人第一会想到直接在Filter中 使用 @Value 注解注入再用参数接收不就行了,如:
@Value("${weixin.appid}") String appid;
但是,很遗憾,这样是注入不进来的,因为 我们的Filter 并不是一个bean,也就是说并没有纳入到spring容器中进行管理,也就无从谈起自动装配了,所以 @Value 是没办法让Spring帮我们注入进来的.
一个方法是在我们自定义的 MyFilter 中添加 @Component注解,这样在 它中的 @Value 也会起作用,但是 Filter会出现一些问题,被初始化两次,一个是Spring初始化,一个是容器初始化.这并不是我们想要的.
@Componentpublic class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("MyFliter.init()...."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; StringBuffer requestURL = request.getRequestURL(); System.out.println("This is my fliter:"+requestURL); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { System.out.println("MyFilter.destory()...."); }}
也有人想到那在 Filter中加载配置文件再去读取也可以啊,
可以是可以,性能不好,毕竟这是个全局过滤器,每次请求进来都加载一下配置文件,不够优雅.
一个优雅的解决方案是什么呢?
我们可以利用配置 filter 时,传递给它初始化参数:
因为这个配置类,我们采用java配置而不是xml文件配置,
所以这显然是一个bean,我们可以在这个配置文件中 使用 @Value() 进行配置文件属性注入
@Configuration//添加此注解,标识这是一个配置类public class WebConfiguration { @Value("${weixin.domain}") private String domain; @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean testFilterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.addInitParameter("domain", "domain"); registrationBean.setName("MyFilter"); registrationBean.setOrder(1); return registrationBean; }}
注意 registrationBean.addInitParameter(“paramName”, “value”);,这是用来初始化filter的参数的,这里添加后可以在Filter中取得,filterConfig.getInitParameter(“paramName”);
@Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CheckOpenidFilter init..."); domain = filterConfig.getInitParameter("domain"); }
,到此,我们就可以在Filter中优雅的使用配置文件的参数了.
- filter在spring框架中使用配置文件参数的一种方法
- 一种读取.properties配置文件参数的方法
- Spring 运行时获得配置文件中参数的方法
- 在Servlet Filter中使用Spring容器
- 在Servlet Filter中使用Spring容器
- Spring MVC在方法参数中使用@ModelAttribute中遇到的一个bug
- 在struts配置文件中使用spring配置的bean
- 在c#中使用opencv的一种方法
- spring中读取配置文件的参数
- 在Spring配置文件中使用properties文件
- 在Spring中使用C3P0的方法
- Quartz配合Spring使用的一种方法
- Spring中ClassPathXmlApplicationContext类的简单使用/在jar包中访问spring配置文件的方式
- spring 框架的配置文件
- spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍
- Spring配置文件中<context:include-filter>和<context:exclude-filter>
- 在Filter中获取web.xml中配置的参数
- Spring框架中如何读取Spring的XML配置文件
- 环信SDK
- Virtual Box安装Windows XP系统
- 第十五篇 Android中使用Fiddler实现手机抓包的基本设置
- Weblogic数据源配置
- NanoPi K2 (Amlogic 905) 自行编译内核启动不起来
- filter在spring框架中使用配置文件参数的一种方法
- npm --save和--save-dev区别
- 补充:php7.0.8 + Apache2.4 + MySQL5.7.13 + phpMyAdmin4.6.3
- Java代码和Oracle数据库对日期转换时的差别
- RHEL下部署Solr。
- 98f7e34845b5
- 纯css3实现栏目三等平均分配
- C语言系列(六)结构体和联合体
- 圆形带图标文字按钮