【发布时间】:2018-01-21 00:45:51
【问题描述】:
我正在开发一个安全过滤器,它需要根据路径变量的值进行一些检查。 我试图这样做:
final Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
但是地图总是空的,看起来我的过滤器比在请求中填充URI_TEMPLATE_VARIABLES_ATTRIBUTE 属性的RequestMappingHandlerMapping 具有更高的优先级。
我尝试添加以下配置:
@Configuration
@EnableWebMvc
public class WebConfiguration {
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping requestMappingHandler = new RequestMappingHandlerMapping();
requestMappingHandler.setOrder(0);
return requestMappingHandler;
}
}
这没有帮助,过滤器在RequestMappingHandlerMapping 被调用之前执行。
相对路径示例:
/user/{uid}/action
我的控制器中有几条路径。它们的路径中都有uid path var,但有些路径的设置顺序不同,有些路径的变量超过1个。
在我的安全过滤器中,我获取 Auth 标头,对其进行解密,从中获取 userId 并将其与路径 var 值进行比较。如果这些 id 不匹配,我会返回 403。
我想知道是否可以覆盖这两个动作的顺序。 或者,也许还有其他方法可以检查过滤器中的路径变量?
【问题讨论】:
标签: spring spring-boot spring-security