基于Struts2拦截器实现权限管理

最近在维护一个基于SSH开发的J2ee系统,其Web接口的设计是这样的:

1
2
3
4
GET /URL/list
POST /URL/add
POST /URL/update
POST /URL/delete

即用GET来实现获取信息,用POST来实现对信息的增删改,请求参数和返回结果均采用JSON格式。显而易见,接口设计相比最近流行的REST架构缺点很多。但这里的任务不是如何优化接口,而是如何在此基础上实现权限控制。
一开始的思路是这样的,在用户请求访问时,参数中携带认证成功后返回的token,Struts2拦截器对token和用户所访问的方法进行权限校验:
思路

后来发现却少对用户所操作对象的权限检查,即用户拥有对某方法的权限,但未必拥有所操作对象的权限:
优化

此为暂时解决方案,贴出来希望能给遇到类似问题的朋友以帮助。系统的架构和逻辑后续会进行优化,标准的REST接口设计会简化权限管理的流程。