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

    
    
    
    

  • 相关阅读:
    MySql 用户 及权限操作
    MAC 重置MySQL root 密码
    在mac系统安装Apache Tomcat的详细步骤[转]
    Maven:mirror和repository 区别
    ES6 入门系列
    转场动画CALayer (Transition)
    OC 异常处理
    Foundation 框架
    Enum枚举
    Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.
  • 原文地址:https://www.cnblogs.com/37sky/p/5055555.html
Copyright © 2011-2022 走看看