spring aop 权限拦截

📅
1 分钟阅读
·

云盘服务端 Java 化后,权限校验通过 HTTP header 中的认证信息完成。请求 body 包含业务数据时,签名计算还需要读取 body。最初实现了一个 Interceptor,并在 preHandle 中从 HttpServletRequest 读取 body 后计算签名;但 Spring MVC 向 handler 参数注入 body 前,请求流已被读取,导致下列 function 的 addGroup 参数为空:

在 handler 参数注入后执行校验

可以实现 Spring 的 MethodInterceptor 接口:

然后在 handler 函数上添加自定义注解:

MethodInterceptor 会在 handler 参数注入完成、函数执行前触发。认证逻辑按约定从已注入的参数中取得业务数据并完成签名校验,因此不会提前消费 request body。

在配置文件中注册拦截器,使 Spring 容器加载该 bean:

<bean id="accessRequiredInterceptor" class="com.xxx.xm.mbox.interceptors.AccessRequiredInterceptor"/>

Spring MVC 的请求生命周期可以通过 MVC 拦截器处理,也可以通过 Spring AOP 拦截。需要依赖已注入的 handler 参数时,MethodInterceptor 可以在相应时机执行校验。


67 字 · 7 段落
ximing

Follow onGitHub

相关文章