• 个人笔记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的页面请求已经做出响应了。)

    
    
    
    

  • 相关阅读:
    Sharepoint 2007 Forms认证与File Not Found错误
    完全控制SharePoint站点菜单(Get full control of SharePoint ActionMenus) Part 1
    从WSS 3.0到MOSS 2007
    如何备份sharepoint中的文档库?
    图片与文本的对齐方式
    backgroundimage 背景图片的设置
    css中三种隐藏方式
    font(字体)所使用的属性
    display属性
    margin中的bug解决方法
  • 原文地址:https://www.cnblogs.com/37sky/p/5055555.html
Copyright © 2020-2023  润新知