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一起使用,甚至可以为预定义的授权规则创建元注释。也许还有其他的逻辑,你不希望这样做,但只是一些事情要考虑。