zoukankan      html  css  js  c++  java
  • Struts2 Interceptor学习

    Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更方便

    ---------------------------------华丽的分割线---------------------------------------

    从一个简单的DEMO入手,正常情况下,客户端可以直接访问我的Action,但是我不想让他们访问,就在Struts2和Action之间架设一道拦截器Interceptor。在用户直接访问我的Action时做出验证,看你是否已经用name="hh"的信息登陆(登录信息放在Session),如果已经登陆,启动拦截,不让你二次访问,如果没有登陆直接放行。

    第一步:

    MyInterceptor类要继承AbstractInterceptor父类,并实现intercept重载,代码如下:

    package com.huohuo.interceptor;
    
    import java.util.Map;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    
    public class MyInterceptor extends AbstractInterceptor {
        public String name;
        @Override
        public String intercept(ActionInvocation ai) throws Exception {
            // TODO Auto-generated method stub
            
            String url = ServletActionContext.getRequest().getRequestURI().toString();
            System.out.println(url);
            Map session = ai.getInvocationContext().getSession();
            
            if(url.indexOf("loginAction")!=-1)
                {
                if(session.get("name")!=null)
                    {
                 name=session.get("name").toString();
                 System.out.println("Interceptor"+name);
                 if(name.equals("hh"))
                        {
                        return "interceptor";        //返回result name="interceptor"的JSP页面
    } } } return ai.invoke(); //让程序继续执行 } }

    第二步:

    写LoginAction类

    package com.huohuo.action;
    
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport implements SessionAware{
        private String name;
        private Map<String,Object> session;
        
        public Map<String, Object> getSession() {
            return session;
        }
        public void setSession(Map<String, Object> session) {
            this.session = session;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public String execute()
        {
            session.put("name", name);
            System.out.println("action----"+name);
            return  SUCCESS;
        }
    }

    第三部:配置struts.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC  
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    
         <constant name="struts.devMode" value="true" />
         <!--Action配置  -->
         
         <package name="default" namespace="/" extends="struts-default">             //自定义拦截器和Action写在同一个package下
         <interceptors>
             <interceptor name="myInterceptor" class="com.huohuo.interceptor.MyInterceptor"></interceptor> //添加自己的拦截器
               <interceptor-stack name="myInterceptorStack">              //配置一个interceptor stack 
                  <interceptor-ref name="myInterceptor"/>
                    <interceptor-ref name="defaultStack"/>                  //这个必须要有,添加自己的拦截器会让默认的拦截器失效,所以要添加
              </interceptor-stack>
       </interceptors>
     
            <action name="loginAction" class="com.huohuo.action.LoginAction"> 
                <interceptor-ref name="myInterceptorStack"></interceptor-ref>      
                <result name="interceptor">/interceptor.jsp</result> 
                <result>/success.jsp</result>
                <result name="input">/input.jsp</result>           
            </action>
        </package>
        <!-- Add packages here -->
    </struts>

    第四步:配置好自己的JSP页面,就可以成功拦截。

  • 相关阅读:
    composer "Failed to decode zlib stream"
    敏捷开发 角色英文简称
    MySQL索引背后的数据结构及算法原理 (转)
    Jenkins mac pkg安装 后默认配置文件/启动路径
    react componentWillReceiveProps 使用注意
    charles https抓包 (安卓安装证书)
    error_reporting()
    PHP开发API接口及使用
    封装pdo单例模式类
    php 将多个txt文件合并成
  • 原文地址:https://www.cnblogs.com/BrowserSnake/p/3749282.html
Copyright © 2011-2022 走看看