在用户登录以后,咱们通常会把用户登录的状态和相关信息进行存储,把对应的token返回到客户端进行存储,下次请求过来时,系统能够经过token拿到当前这个用户的相关信息,这是受权一般的做法,而有时一些业务里,你存储的用户信息不是全局的,可能只是某几个接口会用户某些信息,而你把它存储起来就不是很合理;而且一些隐私信息持久化到redis也不合理,这时就须要统一对这种接口的请求作一块儿处理了。html
咱们能够去实现这个HandlerInterceptor接口,它会把请求页面前,请求页面后等方法,咱们能够重写它们,把本身的逻辑加进来,好比咱们能够在请求页面前,经过当前登录人ID获取到当前登录人能看的信息ID集合,并把这些ID集合以参数的形式传到这个页面里,这个过程是在服务端自动完成的,即对某个页面(接口)进行拦截,添加本身的逻辑。redis
/** * 当前用户的数据权限. */ @Slf4j public class DataPermissionInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info("DataPermissionInterceptor.init"); //业务逻辑,可能判断当前登录人存储的数据权限类型,而后统一处理,拿到能够访问的数据编号集合 String[] ids = {"1", "2", "3"}; request.setAttribute("approveIds", StringUtils.join(ids, ",")); return true; } } 复制代码
注册这个拦截器bash
/** * 注册拦截器 */ @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 自定义拦截器,添加拦截路径和排除拦截路径 registry.addInterceptor(new DataPermissionInterceptor()).addPathPatterns("/approve/**"); } } 复制代码
在对应的页面(接口)里读取在拦截器里赋值的对象,就能够进行剩下的工做了。 markdown
经过这个例子咱们了解到,对一些具备统一操做的动做,咱们能够把它提取到拦截器里去完成。app
转载至→ 原文做者:张占岭 原文连接:www.cnblogs.com/lori/p/1298…ide