Struts2的权限拦截代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2的权限拦截代码相关的知识,希望对你有一定的参考价值。

package cn.erp.utils.interceptor;

import cn.erp.auth.emp.vo.Emp;
import cn.erp.auth.res.business.IResourceService;
import cn.erp.auth.res.vo.Resource;
import cn.erp.utils.exception.CustomException;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import org.apache.struts2.ServletActionContext;

import java.util.List;

/**
 * 描述:权限校验
 */
public class AuthInterceptor extends AbstractInterceptor {

    @javax.annotation.Resource(name = IResourceService.SERVICE_NAME)
    private IResourceService resourceService;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        /**
         * 1.获取本次操作
         * 2.从session中获取当前登录人信息
         *  2.1如果当前登录人信息为null,跳转到登录页面
         * 3 获取当前登录人可执行的所有操作(资源-->角色-->员工)
         * 4 判断当前登录人对应的所有可操作资源中是否包含本次操作
         * 4.1 如果不包含,拦截
         */
        //1.获取本次操作
        String actionName = invocation.getProxy().getAction().getClass().getName();
        String methodName = invocation.getProxy().getMethod();
        String allName = actionName+"."+methodName;

        //获取所有的资源信息,比对本次操作是否在资源全列表中,如果出现了,需要拦截,否则直接放行
        List<Resource> rs = resourceService.getAll();
        //list-->stringbuilder
        StringBuffer sbf = new StringBuffer();
        for(Resource r :rs){
            sbf.append(r.getUrl()).append(",");
        }
        //sbf中保存有需要校验的资源
        if(sbf.indexOf(allName) < 0){
            return invocation.invoke();
        }

        //2.从session中获取当前登录人信息
        Emp emp = (Emp) ServletActionContext.getRequest().getSession().getAttribute("emp");
        //2.1如果当前登录人信息为null,跳转到登录页面
        if(emp == null){
            return "noLogin";
        }
        //3 获取当前登录人可执行的所有操作(资源-->角色-->员工)
        List<Resource> resources = resourceService.getAllResourcesByEmpId(emp.getUuid());
        for (Resource r :resources){
            if(r.getUrl().equals(allName)){
                //放行
                return invocation.invoke();
            }
        }
        throw new CustomException("抱歉,权限不足");


    }
}

 

以上是关于Struts2的权限拦截代码的主要内容,如果未能解决你的问题,请参考以下文章

Struts2拦截器浅解

Struts2学习:interceptor(拦截器)的使用

struts2-权限拦截器日志拦截器execAndWait(进度条)拦截器配置

struts2拦截器加自定义注解实现权限控制

浅谈Struts2拦截器的原理与实现

6Struts2拦截器实现权限控制