拦截验证每一个请求的权限

前面做的尽管在界面内看不见没有权限的链接 但能够直接在地址栏输入链接进行訪问。所以我们这里要使用拦截器拦截每一个訪问action的请求

    1.struts配置

  

	<package name="default" namespace="/" extends="struts-default">
<!--    声明拦截器  -->
			<interceptors >
			<interceptor name="CheckPrivilege" class="cn.itcast.oa.Utils.CheckPrivilegeInterceptor"></interceptor>
	<!-- 定义拦截器栈 -->	
			<interceptor-stack name="MyStack">
			        <interceptor-ref name="CheckPrivilege"></interceptor-ref>
			        <interceptor-ref name="defaultStack"></interceptor-ref>
			 </interceptor-stack>
			</interceptors>
<!--    定义默认拦截器栈 -->
 <default-interceptor-ref name="MyStack"></default-interceptor-ref>


<!-- 配置全局 result -->
			<global-results>
			<result name="loginUI">/WEB-INF/jsp/userAction/loginUI.jsp</result>
			<result name="noPrivilegeError">/noPrivilegeError.jsp</result>
			</global-results>
2.实现拦截器类

public class CheckPrivilegeInterceptor implements Interceptor {
	public String intercept(ActionInvocation invocation) throws Exception {
		/*
		 * System.out.println("拦截之前 "); String result = invocation.invoke();
		 * System.out.println("拦截之后 ");
		 */

		// 获取信息 当前登录用户 要訪问的 权限
		User user = (User) ActionContext.getContext().getSession().get("user");
		// ***************************************
		String nameSpace = invocation.getProxy().getNamespace();

		String ActionNanme = invocation.getProxy().getActionName();

		String privUrl = nameSpace + ActionNanme;// 相应的权限Url
		// 1.是否等录 未登录就转到登录界面
		if (user == null) {
			if (/* 准备去登录 ,就放行 /user_loginUI /user_login */privUrl
					.startsWith("/user_login")) {
				return invocation.invoke();
			} else
				return "loginUI";
		}
		// 登若录 是否有权限
		else {
			// 有权限 放行
			if (user.hasPrivilegeByUrl(privUrl)) {
				return invocation.invoke();
			}
			// 无权限 转到提示界面
			else {
				return "noPrivilegeError";
			}
		}

	}

	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void init() {
		// TODO Auto-generated method stub

	}

}

这里另一点问题就是  对首页的訪问  home_index.action 以及注销的action 等訪问也被拦截了,比方张三登录了。本应该跳到首页,但这个action实现没被安装到(初始化的)权限表中,所以会直接跳到无权訪问的错误页面。

。。

。下一篇我们在探讨怎么把这些主要的权限 赋予每一个人。

【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/llguanli/p/8422273.html