码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2的权限拦截代码

时间:2017-06-02 23:50:45      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:import   open   否则   new   ota   vax   port   页面   proxy   

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的权限拦截代码

标签:import   open   否则   new   ota   vax   port   页面   proxy   

原文地址:http://www.cnblogs.com/xuweiweiailixing/p/6935514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!