细颗粒度权限控制我们采用拦截器完成
具体实现:
第一步:定义一个类 继承MethodFilterInterceptor类
第二步:覆盖doIntercept方法
第三步:通过ActionInvocation 对象获取reques、actiont对象 进而获取方法名
第四步:通过action对象和反射获取方法的反射对象
第五步:获取session中的角色用户信息以及方法上的权限(注解)来校验该用户是否有操作该方法的权限
第六步:在struts.xml中配置
代码实现:
protected String doIntercept(ActionInvocation actioninvocation) throws Exception {
// TODO Auto-generated method stub
//把自定义错误信息 放置到request中
HttpServletRequest request=(HttpServletRequest) actioninvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
try{
//获取请求的action对象
Object action=actioninvocation.getAction();
//获取请求方法的名称
String methodName=actioninvocation.getProxy().getMethod();
//获取action中的方法的封装类(action中的方法没有参数)
Method method=action.getClass().getMethod(methodName, null);
//action 的返回值
String result=null;
//在完成跳转Action之前完成细颗粒权限控制,控制Action的每个方法
//检查注解,是否可以操作权限的URl
boolean flag=isCheckLimit(request,method);
if(true){
<