在我们的真实应用中,我们需要封装我们的服务请求,过滤掉不好的请求信息。在Spring Boot框架中会自动添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter, 但是我需要的往往更多。
在Spring的框架家族中,如Spring Boot, Spring MVC, SpringWeb 和其它的,都提供了多个不同的服务过滤。我们只需要声明它们作为bean来使用即可。想象一下,我们现在有个应用运行在负载均衡的代理中,用户请求的IP需要是真实的IP而不是代理中IP。Tomcat8提供了我们这个功能,那就是RemoteIpFilter。我们需要把RemoteIpFilter加入到我们的过滤链中。
2.3.1代码实现
1.为了明确什么样的类需要被配置,我们需要创建一个配置类取名为WebConfiguration在src/main/java/org/owen/bookpub目录下。
@Configuration |
2.执行程序,你将会看到如下的信息,若果没有,是正常,不需要纠结这个。
..FilterRegistrationBean: Mapping filter: 'remoteIpFilter' to:[/*] |
2.3.2代码说明
在我们的主类BookPubApplication中,我们看到@SpringBootApplication的注释,这个注释包含了@ComponentScan。@ComponentScan构造是Spring Boot会去探测WebConfiguration上的@Configration类,并将它添加到上下文中。所以,我们声明的WebConfiguration就相当于直接放入到BookPubApplication中一样。
@Bean public RemoteIpFilter remoteIpFilter(){…}声明简单创建一个bean给RemoteIpFilter类,它将会加入到过器链中并自动装配。这样的话,只要我们想加更多的过滤器到配置中,例如我们要指定过滤器去应用特殊的URL,我们可以创建@Bean 的FilterRegistrationBean的类型。