【问题标题】:Spring Boot RequestMapping does not work with FilterSpring Boot RequestMapping 不适用于 Filter
【发布时间】:2020-03-19 19:29:26
【问题描述】:

我正在开发一个SpringBoot项目,其中有@RestController和FilterRegistrationBean。我添加的过滤器可以工作,但是@RestController和@RequestMapping中配置的url不起作用。当我请求url时,响应码是200,但没有显示内容。当我删除过滤器时,RequestMapping 工作正常。为什么? (我访问的网址是http://localhost:8080/simple) 这是我的代码。 SessionTokenFilter:

public class SessionTokenFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        Map<String, String[]> param_map = servletRequest.getParameterMap();
        for(String param_key: param_map.keySet()){
            System.out.println("Parameter name: "+param_key);
        }
        System.out.println("Get a request from the browser!");
    }
}

AppConfiguration.java

@Configuration
public class AppConfiguration {
    @Bean
    public FilterRegistrationBean<SessionTokenFilter> registerFilter(){
        FilterRegistrationBean filterBean = new FilterRegistrationBean();
        filterBean.setFilter(new SessionTokenFilter());
        filterBean.setUrlPatterns(Arrays.asList("/*"));
        return filterBean;
    }
}

ApiRouters.java

@RestController
public class ApiRouters {
    @RequestMapping(value="/simple", method= RequestMethod.GET)
    public ResponseEntity simple(){
        System.out.println("Simple url matched!");
        return ResponseEntity.ok().body("Ok");
    }
}

和主入口类:

@SpringBootApplication
public class ApiApplication {
    public static void main(String[] args){
        SpringApplication.run(ApiApplication.class);
    }
}

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    原因是应该调用过滤器链。 当我在过滤器类中添加代码时,一切正常。

    filterChain.doFilter(servletRequest, servletResponse);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2015-04-13
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多