2018年8月26日 星期日

Spring Filter

1.使用Java自己本身的Filter
  1. @SpringBootApplication
  2. @ServletComponentScan("test.annotation.filter")
  3. public class SptringAnnotationFilterApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(SptringAnnotationFilterApplication.class, args);
  6. }
  7. }
  8.  
  9.  
  10. @WebFilter(
  11. filterName="testFilter",
  12. urlPatterns={"/testRest"}
  13. )
  14. public class SpringAnnotationFilter implements Filter{
  15. @Override
  16. public void init(FilterConfig filterConfig) throws ServletException {
  17.  
  18. }
  19.  
  20. @Override
  21. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
  22. throws IOException, ServletException {
  23. // do something
  24.  
  25. filterChain.doFilter(request, response);
  26. }
  27.  
  28. @Override
  29. public void destroy() {
  30.  
  31. }
  32. }
SptringAnnotationFilterApplication
1. 設定@ServletComponentScan(filter的package)

SpringAnnotationFilter
1. implements javax.servlet.Filter
2. 設定@WebFilter(urlPatterns是設定哪些url要filter)
3. 改寫doFilter

這樣filter就可以生效

註:
若有多個filter時,在這邊使用Spring的@Order是沒有用的
真的要使用order的話可以參考下面第二種作法or使用package name去控制filter順序

2.使用Spring的FilterRegistrationBean
  1. @SpringBootApplication
  2. public class SpringBeanConfigFilterApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(SpringBeanConfigFilterApplication.class, args);
  5. }
  6. }
  7.  
  8. @Configuration
  9. public class FilterConfig {
  10. @Bean
  11. public FilterRegistrationBean<Filter> registFilter() {
  12. FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
  13. registration.setFilter(new SpringBeanConfigFilter());
  14. registration.addUrlPatterns("/testRest");
  15. registration.setOrder(2);
  16. registration.setName("testFilter");
  17. return registration;
  18. }
  19.  
  20. @Bean
  21. public FilterRegistrationBean<Filter> registFilter2() {
  22. FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
  23. registration.setFilter(new SpringBeanConfigFilter2());
  24. registration.addUrlPatterns("/testRest");
  25. registration.setOrder(1);
  26. registration.setName("testFilter2");
  27. return registration;
  28. }
  29. }
  30.  
  31. public class SpringBeanConfigFilter implements Filter{
  32. @Override
  33. public void init(FilterConfig filterConfig) throws ServletException {
  34.  
  35. }
  36.  
  37. @Override
  38. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
  39. throws IOException, ServletException {
  40. // do something
  41.  
  42. filterChain.doFilter(request, response);
  43. }
  44.  
  45. @Override
  46. public void destroy() {
  47.  
  48. }
  49. }
  50.  
  51. public class SpringBeanConfigFilter2 implements Filter{
  52. @Override
  53. public void init(FilterConfig filterConfig) throws ServletException {
  54.  
  55. }
  56.  
  57. @Override
  58. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
  59. throws IOException, ServletException {
  60. // do something
  61.  
  62. filterChain.doFilter(request, response);
  63. }
  64.  
  65. @Override
  66. public void destroy() {
  67.  
  68. }
  69. }

使用Spring bean的方式去做設定
註:此設定的方式可以設定filter order

完整程式可參考https://github.com/softmenlouis/springBoot-filter.git

沒有留言:

張貼留言