我正在开发一个安全过滤器,需要根据路径变量的值进行一些检查。 我试图像这样做:
final Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
但是地图始终为空,看起来我的过滤器的优先级高于在请求中填充RequestMappingHandlerMapping
属性的URI_TEMPLATE_VARIABLES_ATTRIBUTE
。
我尝试添加以下配置:
@Configuration
@EnableWebMvc
public class WebConfiguration {
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping requestMappingHandler = new RequestMappingHandlerMapping();
requestMappingHandler.setOrder(0);
return requestMappingHandler;
}
}
没有帮助,过滤器会在RequestMappingHandlerMapping
被调用之前执行。
相对路径示例:
/user/{uid}/action
我的控制器中有几条路径。它们都在路径中有uid
路径变量,但是某些路径的设置顺序不同,有些路径的变量多于1个。
在我的安全过滤器中,我获取Auth标头,对其进行解密,从中获取userId
并将其与路径变量值进行比较。如果这些ID不匹配,我返回403。
我想知道是否可以覆盖这两个动作的顺序。 或者,也许,还有一些其他方法可以检查过滤器中的路径变量吗?
答案 0 :(得分:1)
在Spring中,过滤器在Servlets之前执行。 RequestMappingHandlerMapping
调用DispatcherServlet
,因此RequestMappingHandlerMapping
不能用于检索过滤器中的路径变量。
所以,我想要么实现Interceptor,要么采用AOP方法。