特定控制器的自定义Web过滤器

时间:2018-03-07 16:08:41

标签: spring-boot filter controller

请帮助我,或者说明解决此问题的其他方法。

@RestController
@RequestMapping("/users")
public class UserController {

    @RequestMapping("/login")
    public String logIn() {
        return "";
    }

    @RequestMapping("/getUserData")
    @FilterThisRequest
    public String getUserData(@PathVariable Long userId) {
        return user;
    }
}

AuthFilter extends GenericFilterBean有一定的逻辑。如何才能使过滤器仅在具有@FilterThisRequest的方法之前执行?或者有更好的做法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners-beans检查FilterRegistrationBean参考指南。

通过@Configuration类使FilterRegistrationBean可用于Spring,下面的示例将确保authFilter仅针对/ getUserData运行。请注意,它是基于URL(而非方法)的过滤。

@Autowired AuthFilter authfilter;
....
....
@Bean
public FilterRegistrationBean authFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean(authfilter);
    registration.addUrlPatterns("/web-app-name/getUserData/");
    return registration;
}

答案 1 :(得分:1)

我建议您使用拦截器。

ListView

拦截器 -

@Configuration 
public class Config extends WebMvcConfigurerAdapter {

@Autowired
RequestInterceptor requestInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(requestInterceptor).addPathPatterns("/getUserData","/user");
    }

}

您可以根据需要覆盖Interceptor的预处理和postHandle。