zoukankan      html  css  js  c++  java
  • 拦截验证每一个请求的权限

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

    。。

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

  • 相关阅读:
    Python网络爬虫——Beautiful Soup
    Python网络爬虫——Request
    二叉树结构详解
    哈夫曼树与哈夫曼编码
    树的基本概念
    Linux系统管理—用户和用户组管理
    作为Web开发人员,必须知道的网络协议有哪些?
    编写可靠Linux shell脚本的八个建议
    云计算应用现状与关键技术
    Linux系统如何禁止普通用户切换root?
  • 原文地址:https://www.cnblogs.com/llguanli/p/8422273.html
Copyright © 2011-2022 走看看