Spring Security 匹配Restful url
由于项目中使用到了restful风格的url,url中的变量问题,导致权限校验这里变得棘手起来
这里介绍两种方案
-
方案一
这里刚刚开始使用的方案,方法是利用String的正则匹配,将带有变量的url以正则的形式存放起来,当有请求时,使用该带有正则表达式的url去匹配请求的url。 -
方案二
这是我更改后的解决方案,主要是用到SpringMvc的HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE
但是由于spring security的filter执行在springmvc之前,因而在spring security里头的filter无法获取BEST_MATCHING_PATTERN_ATTRIBUTE
所以我们需要先从RequestMappingHandlerMapping入手,获取handler。
首先在类中注入RequestMappingHandlerMapping
@Autowired
RequestMappingHandlerMapping handlerMapping;
接着,我们便可以使用一下代码获取urlPattern
了
try {
handlerMapping.getHandler(request);
} catch (Exception e) {
e.printStackTrace();
}
String urlPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
我们会得到一个这样的urlPatternlocalhost:8080/user/{name}
至此,便大功告成了