zoukankan      html  css  js  c++  java
  • Struts2>自定义interceptor 小强斋

    Struts2 自定义拦截器

    一、拦截器定义,一般有两种方式

    1、实现Interceptor接口

    public interface Interceptor extends Serializable{  
         public void init();  
         public void destroy();  
         public String intercept(ActionInvocation invocation)();  
    }  

    2、继承AbstractInterceptor类,重写intercept()方法即可
    此方法更可行,其实AbstractInterceptor类也就是实现了Interceptor接口

    invocation.invoke();表示该方法执行完后执行Action的execute()方法或者执行下一个拦截器  
    invocation.getAction(); 可以将该法强制转换为Action的类类型

    3、方法拦截器:继承MethodFilterInterceptor类,重写doIntercept()方法

    MethodFilerInterceptor实现方法过滤中用到的两个参数

    execludeMethods:该参数指定拦截器拒绝拦截的方法列表,多个方法用“,”隔开,指定了这个参数,拦截器不会拦截指定列表中的方法,就是所谓的黑名单

    includeMethods:该参数指定拦截器需要拦截的方法列表,如果指定了参数,则指定的Action在执行前会被拦截,即白名单。

    二、使用自定义拦截器

    1、包内定义拦截器

    <package....>  
         <interceptors>  
              <interceptor name="myinterceptor" class="....">  
              </interceptor>  
         </interceptors>  
    </package>  

    2、action内使用拦截器

    <action .....>  
         <result.....></result>  
         <interceptor-ref name="defaultStack"></interceptor-ref>  
         <interceptor-ref name="myinterceptor"></interceptor-ref>  
    </action>  

    主要:可以看出使用了自定义拦截器的action要配置默认拦截器的引用,因为默认拦截器包含了参数的读取、session的管理等功能

    三、例子代码

    PermissionInterceptor.java

    package com.interceptor;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    /**
     * 限制没有登录的用户进入访问页面
     */
    @SuppressWarnings("serial")
    public class PermissionInterceptor implements Interceptor {
        public void destroy() {
        }
        public void init() {
        	System.out.println("自定义interceptor执行");
        }
        public String intercept(ActionInvocation invocation) throws Exception {
            Object user = ActionContext.getContext().getSession().get("user");
            // 如果user不为null,代表用户已经登录,允许执行action中的方法
            if (user != null){
            	System.out.println("用户已经登录");
            	
                return invocation.invoke(); 
            }
            System.out.println("用户没有登录");
            ActionContext.getContext().put("message", "你没有权限执行该操作");
            return "input";
        }
    }

    TestAction.java

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TestAction extends ActionSupport {
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行action");
    		return super.execute();
    	}
    
    }
    

    struts.xml

    <struts>
    	<constant name="struts.devMode" value="true"></constant>
    	<package name="test" namespace="/" extends="struts-default">
    		<interceptors>
    			<interceptor name="myinterceptor" class="com.interceptor.PermissionInterceptor"></interceptor>
    		</interceptors>
    
    		<action name="test" class="com.action.TestAction">
    			
    			<result name="success">/success.jsp</result>
    			<result name="input">/error.jsp</result>
    		    <interceptor-ref name="myinterceptor"></interceptor-ref>
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    		</action>
    
    	</package>
    </struts>
    

    index.jsp 导航到login.jsp 和quit.jsp

     <a href="login.jsp">login.jsp</a>
        <a href="quit.jsp">quit.jsp</a>

    login.jsp  向session添加user,访问action

    <% request.getSession().setAttribute("user", "wsz");%>
    该页面往session中添加user <a href="test.action">user.action</a>
    

    quit.jsp   从session移除user,访问action

    <%
        request.getSession().removeAttribute("user");
    %>
             该页面从sessiong中移除user
        <a href="test.action">user.action</a>
    

    success.jsp

    user.action访问成功

    error.jsp

     user.action访问成功
  • 相关阅读:
    ora04063:view view_test has errors
    toad for oracle中登入界面Connect using框和TNSNames Editor框的显示状态
    格式化时间,转为中文
    一些简单有用的方法合集
    C#加密解密
    计算员工有效工作时间(C#版)
    计算员工有效工作时间(sql版)
    JavaScript 语言基础知识点总结(思维导图)
    正则表达式
    C#中请不要混淆引用类型和ref引用传参
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637520.html
Copyright © 2011-2022 走看看