前后端分离的项目中,服务端对于每个请求都是一模一样的,对于每个用户的请求识别就需要用到一个统一的方式(jwt),然后在访问每个接口的时候先对这个jwt进行识别,查出这个用户的权限级别,检查是否拥有访问这个接口的权限,如果没有,那么将直接返回一个错误信息,表示权限不足,反之放过,继续往下执行。
jwt就是一个包含用户信息的加密字符串:参考:JWT的生成及验证过程
因为对于每个接口都需要进行权限校验,那么采用spring的aop最好不过了。设置每个controller都需要经过的aop切面,在切面中获取出controller中的HttpServletRequest,这个request知道了就可以获取出访问的所有headers之类的参数了。接下来就进行权限验证。
面向对象的特点之一就是继承,所以在项目中controller都需要继承一个BaseController,这样的好处之一是在controller层中可以复用一些BaseController的方法,比如获取远端ip地址、获取用户权限等常用函数。好处之二就是在权限校验切面中调用BaseController controller = (BaseController) joinPoint.getTarget();这个方法的时候可以统一转成一个对象。
BaseController一般是这样的:
public class BaseController {
private static final Logger log = Logger.getLogger(BaseController.class);
protected static final ThreadLocal<HttpServletRequest> requests = new ThreadLocal();
protected st