如何在Spring Boot中设置过滤器链?

我遇到过spring-boot,打算为传入的请求添加过滤器链。

这是应用程序:

package example.hello;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ApplicationContext;

@SpringBootApplication

public class Application {

public static void main(String[] args) {

ApplicationContext ctx = SpringApplication.run(Application.class, args);

}

}

这是控制器:

package example.hello;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@RestController

public class GreetingController {

private static final String template = "Hello, %s!";

private final AtomicLong counter = new AtomicLong();

@RequestMapping("/greeting")

public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {

return new Greeting(counter.incrementAndGet(),

String.format(template, name));

}

}

这是过滤器配置:

package example.hello;

import org.springframework.boot.context.embedded.FilterRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class WebConfig {

@Bean

public FilterRegistrationBean greetingFilterRegistrationBean() {

FilterRegistrationBean registrationBean = new FilterRegistrationBean();

registrationBean.setName("greeting");

GreetingFilter greetingFilter = new GreetingFilter();

registrationBean.setFilter(greetingFilter);

registrationBean.setOrder(1);

return registrationBean;

}

@Bean

public FilterRegistrationBean helloFilterRegistrationBean() {

FilterRegistrationBean registrationBean = new FilterRegistrationBean();

registrationBean.setName("hello");

HelloFilter helloFilter = new HelloFilter();

registrationBean.setFilter(helloFilter);

registrationBean.setOrder(2);

return registrationBean;

}

}

这是HelloFilter和Greeting过滤器:

package example.hello;

import javax.servlet.*;

import java.io.IOException;

public class HelloFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

System.out.println("HelloFilter!");

}

@Override

public void destroy() {

}

}

package example.hello;

import javax.servlet.*;

import java.io.IOException;

public class GreetingFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

System.out.println("Greetings from filter!");

}

@Override

public void destroy() {

}

}

当我启动应用程序并运行时curl localhost:8080/greeting,仅收到“来自过滤器的问候”,并且HelloFilter不会被调用。

此外,没有任何回应Greeting Controller。似乎GreetingFilter阻止了该程序。

那么如何在Spring Boot中设置过滤器链。上面的代码中有任何错误吗?

回答:

在GreetingFilter中添加以下代码行

filterChain.doFilter(servletRequest, servletResponse);

以上是 如何在Spring Boot中设置过滤器链? 的全部内容, 来源链接: utcz.com/qa/419206.html

回到顶部