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}
至此,便大功告成了