zoukankan      html  css  js  c++  java
  • 个人笔记struts2对Action的权限拦截

    一、编写一个类实现com.opensymphony.xwork2.interceptor.Interceptor 接口

    PermissionInterceptor.java

    <pre name="code" class="java">package cn.sky.bookshop.interceptor;
    
    import org.apache.struts2.ServletActionContext;
    
    import cn.sky.bookshop.utils.DateUtil;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    public class PermissionInterceptor implements Interceptor {
    
        private static final long serialVersionUID = -1908127830415801520L;
    
        private String includeUrl;
    
        public void destroy() {
        }
    
        public void init() {
        }
    
        public String intercept(ActionInvocation invocation) throws Exception {
    	//会话session中取出uname
    	Object obj = ServletActionContext.getRequest().getSession().getAttribute("uname");
    	//获取访问路径
    	String path = ServletActionContext.getRequest().getServletPath();
    	//如果存在uname或者访问路径包含在includeUrl中
    	if (obj != null || includeUrl.contains(path)) {
    	    return invocation.invoke(); //继续调用下一个拦截器,如果没有则执行Action
    	}
    	ServletActionContext.getRequest().setAttribute("errorInfo","No permission to operate the page");//保存错误信息
    	return "disallow";//返回视图
        }
    
        public String getIncludeUrl() {
    	return includeUrl;
        }
    
        public void setIncludeUrl(String includeUrl) {
    	this.includeUrl = includeUrl;
        }
    }
    
    二、配置struts.xml 文件

    (1)定义一个自己的默认包:
    	<package name="my-struts-default" namespace="/" extends="struts-default">
    
    		<interceptors>
    			<!-- 这里是定义一个拦截器 -->
    			<interceptor name="permission" class="cn.sky.bookshop.interceptor.PermissionInterceptor">
    					<!-- 拦截器的初始化注入参数 -->
    					<param name="includeUrl">/user/user_login.action,/getcode</param>
    			</interceptor>
    			<!-- 这里定义一个拦截器栈 -->
    			<interceptor-stack name="myDefalutStack">
    				<interceptor-ref name="defaultStack"></interceptor-ref>
    				<interceptor-ref name="permission"></interceptor-ref>
    			</interceptor-stack>
    		</interceptors>
    		<!--设置默认的拦截器栈(访问Action前默认调用)-->
    	<default-interceptor-ref name="myDefalutStack"></default-interceptor-ref>
    		<!-- 全局result -->
    		<global-results>
    			<result name="disallow" type="redirect">/login.jsp</result>
    		</global-results>
    		<action name="getcode" class="cn.sky.bookshop.action.VerifyCodeAction">
    		</action>
    
    	</package>
    (2)以后的包都继承上面my-struts-default


    注意:这里只能实现对访问Action时实现拦截,对jsp的访问不可能实现拦截。(可以将自定义拦截器栈中的默认拦截器
    <pre name="code" class="html">defaultStack注释掉,访问jsp发现根本没执行过此拦截器。可想而知,在拦截器工作之前对jsp的页面请求已经做出响应了。)

    
    
    
    

  • 相关阅读:
    Vue-cli的安装和使用
    Codeforces Round #182 (Div. 1) B. Yaroslav and Time 最短路
    HDU 4745 Two Rabbits 区间dp_回文序列
    Codeforces Round #284 (Div. 1) C. Array and Operations 二分图最大匹配
    HDU 4734 F(x) 数位dp
    HDU 4389 X mod f(x) 数位dp
    HDU 5900 QSC and Master 区间dp
    Codeforces Round #235 (Div. 2) D. Roman and Numbers 状压dp+数位dp
    HDU 3709 Balanced Number 数位dp
    Codeforces Round #304 (Div. 2) E. Soldier and Traveling 最大流
  • 原文地址:https://www.cnblogs.com/37sky/p/5055555.html
Copyright © 2011-2022 走看看