基于struts2拦截器的权限管理之拦截器实现
这里共定义了三种拦截器,用于日志记录·过滤未登录用户·验证访问权限·作业时间拦截器:
?
1.日志记录。
/** * 身份验证 */package com.ylsoft.power.web.intercept;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.ylsoft.power.domain.entity.Catalog;import com.ylsoft.power.domain.entity.User;import com.ylsoft.power.openservice.AccessService;import com.ylsoft.power.openservice.PowerBean;import com.ylsoft.power.web.action.AbstractAction;public class AuthenticateInterceptor extends AbstractInterceptor{private static final long serialVersionUID = 4422212767616230184L;public static final String MENUNAME="IS-A-MENU";//是不是导航菜单private AccessService accessService;//访问处理服务public void setAccessService(AccessService accessService) {this.accessService = accessService;}/** * 拦截并处理 */public String intercept(ActionInvocation ai) throws Exception {authenRole(ai);return ai.invoke();}/** * 核心方法 进行角色验证 * @param ai * @return true * @throws Exception */private boolean authenRole(ActionInvocation ai) throws Exception{System.out.println(ai);HttpSession session=((HttpServletRequest)ai.getInvocationContext().get(ServletActionContext.HTTP_REQUEST)).getSession();HttpServletRequest request = (HttpServletRequest) ai.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);String type="";if ("menu".equals(request.getParameter("t"))) {//规定 如果是菜单访问的参数会在后面加上一个标识type=MENUNAME;}//访问的判断都在下面的方法里面Catalog catalog=accessService.accessInUrl((String)session.getAttribute(AccessLogInterceptor.ACTION_NAME), (User)session.getAttribute(AbstractAction.LOGIN_USER_SESSION_KEY),type);PowerBean powerBean=new PowerBean(catalog);//权限bean 里面包含了用户当前请求页面的按钮和输入框,也就是表单的元素ai.getStack().set(PowerBean.name, powerBean);//放在值栈里用于标签读取return true;}}?4.作业时间
?
这里是业务上一个内容,不在权限范围内。