HandlerMapping

基于角色的权限控制在springMVC框架中的实现

旧城冷巷雨未停 提交于 2019-12-06 00:03:04
前言:常规来说,我们在做权限的时候,基本就是这么几个要素:用户、角色、资源(权限点)。角色本质上是给资源分组,这样不同的group具有不同的权限来控制用户更方便一些。 一般情况下,web应用的权限控制都会设计成把请求路径(也就是url,实质是uri)作为权限点来赋予角色不同的权限,在拦截器获取用户信息后,根据用户的角色找到对应的权限点,并与当前的请求路径匹配,最终返回是否具有权限。 那么,今天我想说的是,在一般的web项目中,在spring(MVC)框架下,我们是怎么灵活使用spring框架本身完成权限校验的。 对于一个web请求来说,我们都能得到一个HttpServletRequest对象,那么这个request对象有很多信息决定了这个请求的唯一性:请求路径uri、请求方法(常用rest风格的GET/POST/PUT/DELETE...)、请求参数params、请求头header(主要包括Content-Type、Referer、User-Agent、Cookie)等,可惜传统的权限控制实现方式是比较局限的,而且严重限制了制定rest风格的url。 所以,springmvc是怎么将当前request对象和所有controller的请求进行匹配的呢?我们可以利用这个机制实现权限控制。 OK,源码分析正式开始: part I springmvc继承了servlet的核心处理类:

【原创】遨游springmvc之HandlerMapping

最后都变了- 提交于 2019-11-27 16:41:53
1 . 前言 之前我们springmvc原理篇里已经介绍过,从springmvc核心处理器DispatcherServlet派遣请求的时候,首先会将请求包装,这就是我们这边介绍的HandlerMapping 在springmvc源码介绍中我们知道, HandlerMapping是一个处理对象映射和映射对应的处理程序的一个中间体,它也可以由开发者自己去实现,但是我们一般没有这个必要,因为springmvc框架已经给我们提供了足够的映射处理器给我们,通常在初始化我们的web项目的时候,springmvc会初始化2个处理器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping、org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,其中RequestMappingHandlerMapping便可以处理我们在Controller中带@RequestMapping的方法,HandlerMapping可以直接实现拦截器,但是不会这么做,通常HandlerMapping都会用一个叫HandlerExecutionChain的东西给包装起来