爱吃鱼饵

 

SpringMVC获取请求的匹配方法对应的路径

背景

在解决项目权限管理的过程中,原项目使用httpServletRequest.getRequestURI()获取请求的uri去进行鉴权,但是这样在有路径变量的时候,过程就变得复杂起来,可能需要采用正则去解决这个问题。

思考

既然SpringMVC能够帮我们匹配的可以执行的方法,那么通过反射获取到相应的匹配路径,例如@GetMapping("/users/{sysUserId}"),那么我们就可以保证鉴权的uri和数据库中存放的uri一致了,不需要正则去匹配。

解决方法

1、发送请求
浏览器发送以下请求http://localhost:8080/glive/tasks/web/3,正常通过httpServletRequest.getRequestURI()获取URI为/glive/tasks/web/3。这不能够具有标准性,如果我改变为/glive/tasks/web/4,那么鉴权就变得复杂起来了。

2、拦截器获取匹配HandlerMethod的路径
在拦截器的preHandle方法中

String path = null;
if(o instanceof HandlerMethod){
    RequestMapping mapping = ((HandlerMethod) o).getMethodAnnotation(RequestMapping.class);  // 获取方法上的注解
    RequestMapping mappingClass = ((HandlerMethod) o).getBeanType().getAnnotation(RequestMapping.class);  // 获取类的注解
    if(mapping == null || mappingClass == null)
        return false;
    path = mappingClass.value()[0] + mapping.value()[0];
}

那么得到的路径path就变为/glive/tasks/web/{taskId},这时,就可以直接用该path去鉴权了!!

posted on 2021-07-06 09:37  爱吃鱼饵  阅读(823)  评论(0编辑  收藏  举报

导航