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实现没被安装到(初始化的)权限表中,所以会直接跳到无权訪问的错误页面。

    。。

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

  • 相关阅读:
    KindEditor-编辑器配置参数属性
    泛型作为返回类型的写法
    ObservableCollection<T> 类
    常遇到的问题
    实现跨浏览器html5表单验证
    mysql 密码重置
    Web用户的身份验证及WebApi权限验证流程的设计和实现
    Discuz3.2 新用户插入数据库SQL
    3. 深入研究 UCenter API 之 加密与解密(转载)
    window.open实现模式窗口
  • 原文地址:https://www.cnblogs.com/llguanli/p/8422273.html
Copyright © 2011-2022 走看看