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("抱歉,权限不足"); } }
时间: 2024-10-17 18:00:12