struts2拦截器的一个使用实例

一个关于struts2自定义拦截器使用的例子,觉得很好,记录下来,以备后用。

要求:建立一个拦截器,用户名后缀为“r”的才允许访问“/sec”命名空间下的所有 action。 (拦截器、struts.xml,需 要定义拦截器堆栈、缺省拦截器引用等)

  • 关于拦截器的基础知识可以查看拦截器的使用网上教程一大堆,自己随便搜搜就有了,在此不加探讨。

一、项目结构图

jiegoutu

二、主要jsp文件(部分省略)

<!--login.jsp  -->
 <body>
   <form action="sec/login.action" method="post">
        <br>用户名:<input type="text" name="userName"/><br>
        <br>密码:<input type="submit" value="提交"/>
   </form>
  </body>


 <!-- login_check_suc.jsp -->
  <body>
    <a href="sec/add.action">添加</a><br>
    <a href="update.action">修改</a><br>
    <a href="delete.action">删除</a><br>
    <a href="query.action">查看</a><br>
  </body>


Action代码

package experimentThree;

import com.opensymphony.xwork2.ActionSupport;

public class HandlerAction extends ActionSupport {

    /**
     * 处理用户Action逻辑
     */
    private static final long serialVersionUID = 1L;
    public String add(){
        return SUCCESS;
    }
    public String delete(){
        return SUCCESS;
    }
    public String update(){
        return SUCCESS;
    }
    public String query(){
        return SUCCESS;
    }
}


package experimentThree;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware {

    /**
     * 处理登录的action类
     */
    private static final long serialVersionUID = 1L;
    private String userName;
    private Map<String, Object> sessionMap;
     public void setUserName(String userName) {
        this.userName = userName;
    }
     public String getUserName(){
         return userName;
     }
    @Override
    public void setSession(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
            sessionMap=arg0;
            sessionMap.put("userName", userName);
    }

    public String execute(){
        /*if(userName!=null){
            sessionMap.put("userName", userName);
            return SUCCESS;
        }else{
            return LOGIN;*/
        return SUCCESS;

        //}
    }
}


package experimentThree;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.*;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;;

public class LoginCheck extends AbstractInterceptor {

    /**
     * 用户登录检查拦截器Action
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        //通过核心调度器invocation来获得调度的上下文
        HttpServletRequest request = ServletActionContext.getRequest();
        //ActionContext actionContext=invocation.getInvocationContext();
        //获得session对象
        //Map<String, Object>sessionMap=actionContext.getSession();
        //从session中取出名为userName的session属性
        //String  userNameString=(String) sessionMap.get("userName");
        String userNameString = request.getParameter("userName");
         if (!userNameString.endsWith("r")) {
                ((ActionSupport) invocation.getAction())
                        .addActionMessage("用户名的最后一个字母不是r!!!");
                System.out.println("这里就应该输出的是:" + userNameString);
                return Action.LOGIN;
            }
            return invocation.invoke();


    }

}


三、struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="disp" namespace="/sec" extends="struts-default">
        <interceptors>
            <!-- 定义拦截器 -->
            <interceptor name="loginInterceptor" class="experimentThree.LoginCheck">
            </interceptor>
            <!--  定义拦截器栈-->
            <interceptor-stack name="myStack">
                <!-- 使用拦截器loginInterceptor -->
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <!--使用内置拦截器 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <global-results>
            <!-- 定义全局Result -->
            <result name="login">login.jsp</result>
        </global-results>
        <!--配置登录Action  -->
        <action name="login" class="experimentThree.LoginAction">
            <interceptor-ref name="myStack"></interceptor-ref>
            <result>login_check_suc.jsp</result>

        </action>
        <!--配置handleEvent的action  -->
        <action name="*" class="experimentThree.HandlerAction" method="{1}">

            <result>{1}.jsp</result>
        </action>
    </package>

</struts>    


四、测试

(1)首页
这里写图片描述
(2)输入错误时,返回主页,并在控制台提示
这里写图片描述
(3)输入正确时,进入管理页面
这里写图片描述


五、参考文献

【1】struts2框架应用教程 清华大学出版社 陈恒、张一鸣编著

发布了32 篇原创文章 · 获赞 32 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Evan_love/article/details/80146347