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

Posted llguanli

tags:

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

前面做的尽管在界面内看不见没有权限的链接 但能够直接在地址栏输入链接进行訪问。所以我们这里要使用拦截器拦截每一个訪问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实现没被安装到(初始化的)权限表中,所以会直接跳到无权訪问的错误页面。

。。

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

以上是关于拦截验证每一个请求的权限的主要内容,如果未能解决你的问题,请参考以下文章

权限模块_使用权限_显示有权限的链接_思路分析_拦截验证每个请求的权限_完善权限的分类_一些细节

struts2拦截器-简单实现非法登录验证

Django REST框架--认证和权限

[Abp 源码分析]权限验证

ssh框架里拦截器的权限验证基本思路

用 Alamofire 拦截每一个响应