未调用 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 过滤器的主要内容,如果未能解决你的问题,请参考以下文章