请帮助我,或显示其他方法来解决这个问题。
@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
的方法之前执行?或者有更好的方法来解决这个问题?
3条答案
按热度按时间gwo2fgha1#
在www.example.com上查看FilterRegistrationBean参考指南https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners-beans。
通过@Configuration类使FilterRegistrationBean可用于Spring,下面的示例将确保authFilter仅为/getUserData运行。请注意,它是基于URL(而不是方法)的过滤。
cbjzeqam2#
我会推荐你做拦截者
拦截器-
您可以根据需要覆盖Interceptor的prehandle和postHandle。
yws3nbqq3#
这是更容易的方式,只是有所有的方法背后的身份验证有一个网址前缀,如。
admin/
或其他。建议的定义所有URL路径模式的选项效率不高,应用程序可以有数百个URL模式进行过滤
您的示例将如下所示
创建一个
HandlerInterceptor
-Spring 3.1.0
或使用HandlerInterceptorAdapter
为较低版本阅读有关它在 Spring 网站。创建一个方法来检查所有URL前缀为
admin/
或任何你喜欢的请求。使用prehandle
覆盖方法中的方法。如果URL具有admin/
前缀,则可以运行身份验证代码,否则忽略,请参阅下文