未调用 Spring Boot Rest API 过滤器

Posted

技术标签:

【中文标题】未调用 Spring Boot Rest API 过滤器【英文标题】:Spring Boot Rest API filter not invoked 【发布时间】:2019-01-06 16:03:05 【问题描述】:

我想在我的 Spring Boot Rest API 项目上实现过滤器,但是我的过滤器没有被调用。我为此添加了以下实现。

public class AutorizationFilter implements Filter
Logger log = LoggerFactory.getLogger(AutorizationFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException 
    log.info("**** Start ****");


@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException 
    log.info("**** doFilter ****");
    chain.doFilter(request, response);


@Override
public void destroy() 
    log.info("**** end ****");

initdestroy 方法正在工作,但 doFilter 方法没有调用。

@Configuration
public class RestApiConfig 
@Bean
public FilterRegistrationBean<AutorizationFilter> filterRegistrationBean()
    FilterRegistrationBean<AutorizationFilter> registrationBean = new FilterRegistrationBean<>();
    registrationBean.setFilter(new AutorizationFilter());
    registrationBean.addUrlPatterns("/**");
    return registrationBean;    

我的控制器如下:

@RestController 
@RequestMapping("/home")
public class HomeController 
@RequestMapping(value="/hello",method=RequestMethod.GET)
public ResponseEntity<Object> hello() 
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("data","called home controller");
return new ResponseEntity<>(resultMap,HttpStatus.OK);
 

任何人请帮助我为什么 dofilter 方法不起作用。

【问题讨论】:

您刚刚创建了一个带有过滤器的 BEAN,但没有将其应用于应用程序。常见的是使用 Spring security WebSecurityConfigurerAdapter 并在里面添加过滤器。欲了解更多信息,请使用baeldung.com/spring-security-custom-filter @Mykhailo Voloshyn:所以我不能在没有 Spring 安全性的情况下使用过滤器? 我想你可以。但是我没有这样的经验。你读过这个吗? ***.com/questions/19825946/… 我终于找到了解决方案,我需要将registrationBean.addUrlPatterns("/**") 替换为registrationBean.addUrlPatterns("/*") 并且它对我来说工作正常。 @PiyushChaudhari 添加您的解决方案作为答案并接受它以帮助未来的读者。我有同样的问题,但几乎没有注意到你的评论。谢谢 【参考方案1】:

我终于找到了解决方案,我需要将registrationBean.addUrlPatterns("/**") 替换为registrationBean.addUrlPatterns("/*"),它对我来说工作正常。

【讨论】:

以上是关于未调用 Spring Boot Rest API 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

仅在 REST API 调用上的 Spring Boot 404

在spring boot应用程序中从自己的rest api调用另一个rest api

未找到接口 java.util.List Rest API Spring boot 的主构造函数或默认构造函数

当我进行 Rest api 调用时,使用 Spring Boot 动态创建列/表

在 Spring Boot 中使用 FeignClient 进行同步 Rest API 调用

从 Ajax 调用 Spring Boot Rest API 时出现 CORS 错误