请帮助我,或者说明解决此问题的其他方法。
@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
的方法之前执行?或者有更好的做法来解决这个问题?
答案 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。