Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 特定控制器的自定义web筛选器_Spring Boot_Filter_Controller - Fatal编程技术网

Spring boot 特定控制器的自定义web筛选器

Spring boot 特定控制器的自定义web筛选器,spring-boot,filter,controller,Spring Boot,Filter,Controller,请帮助我,或者演示其他解决此问题的方法 @RestController @RequestMapping("/users") public class UserController { @RequestMapping("/login") public String logIn() { return ""; } @RequestMapping("/getUserData") @FilterThisRequest public Str

请帮助我,或者演示其他解决此问题的方法

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

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

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

我让AuthFilter扩展了GenericFilterBean,这形成了某种逻辑。如何使筛选器仅在具有@FilterThisRequest的方法之前执行?或者有更好的方法来解决这个问题?

我建议您使用拦截器

@Configuration 
public class Config extends WebMvcConfigurerAdapter {

@Autowired
RequestInterceptor requestInterceptor;

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

}
拦截器-

@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {


@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object object) throws Exception {
}

您可以根据需要覆盖拦截器的预处理和后处理

我建议你使用拦截器

@Configuration 
public class Config extends WebMvcConfigurerAdapter {

@Autowired
RequestInterceptor requestInterceptor;

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

}
拦截器-

@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {


@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object object) throws Exception {
}

您可以根据需要覆盖拦截器的预处理和后处理

查看位于的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;
}

查看位于的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;
}

虽然这不能直接回答您的问题,但您使用的是Spring安全性吗?如果你是,你可以考虑使用。具体来说,您可以将@PreAuthorize注释与SpEL一起使用,甚至可以为预定义的授权规则创建元注释。可能还有其他的逻辑,你不想这样做,但只是要考虑的事情。虽然这不能直接回答你的问题,你是使用Spring Security?如果你是,你可以考虑使用。具体来说,您可以将@PreAuthorize注释与SpEL一起使用,甚至可以为预定义的授权规则创建元注释。也许还有其他的逻辑,你不希望这样做,但只是一些事情要考虑。