struts自定义拦截器

第01步:配置web.xml,启动struts框架

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

第02步:编写action类

package com.self.action;

public class InterceptorAction {
    private String message ;

    public String login(){
        this.message="登录成功!";
        return "success";
    }

    public String addUser(){
        this.message="添加用户";
        return "success";
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

第03步:编写拦截器类

package com.self.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;//导入包,包里含有Interceptor类

/**第01 步:编写拦截器**/
public class Permission implements Interceptor {

    public void destroy() {

    }

    public void init() {

    }

    public String intercept(ActionInvocation invocation) throws Exception {//属于aop编程的环绕通知
        String reString="";
        //01:判断用户是否登录,登录就有权限执行action方法,没登陆就没权限
        Object user=ActionContext.getContext().getSession().get("user");
        if(user!=null){
            reString=invocation.invoke();//执行被拦截的action方法,被拦截的action方法有返回的字符串,原样返回
            ActionContext.getContext().put("message", "允许执行该操作");
            System.out.println("执行拦截的方法,并返回字符串:"+reString);
            //return invocation.invoke();可以直接这样
        }else{
            reString="error";
            ActionContext.getContext().put("message", "不允许执行该操作!");
            System.out.println("执行拦截的方法,并返回字符串:"+reString);
        }
        return reString;//原样返回action方法的字符串
    }

}

第04步:配置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.action.extension" value="do,action"/>
    <!-- 第02步:配置action -->
    <package name="intercept" namespace="/" extends="struts-default">

        <!-- 第03步:注册拦截器 -->
        <interceptors>
            <!-- 03.1:自定义拦截器配置 -->
            <interceptor name="permission" class="com.self.action.Permission" />
            <!-- 03.2 :定义拦截器栈,不定义会失去很多struts自身的拦截器-->
            <interceptor-stack name="permissionStackss">
                <!-- 03.4:引入系统拦截器栈:defaultStack,系统拦截器栈放前面,先执行 -->
                <interceptor-ref name="defaultStack"/>
                <!-- 03.5:引入自定义拦截器 -->
                <interceptor-ref name="permission" />
            </interceptor-stack>
        </interceptors>

        <global-results>
            <result name="error">
                /error.jsp
            </result>
        </global-results>
        <action name="list_*" class="com.self.action.InterceptorAction" method="{1}">
            <!-- 03.6:自定义拦截器先执行 -->
            <interceptor-ref name="permissionStackss" />
            <result name="success">
                /show.jsp
            </result>
        </action>
    </package>
</struts>

第05步:编写界面,session有数据,拦截器通过

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
</head>
<body>
    <%
        request.getSession().setAttribute("user", "zouli");
    %>
    <center>
        <a href="list_login.action">用户登录action!</a><BR>
        <a href="list_addUser.action">添加用户action!</a><BR>
    </center>
    <br>
</body>
</html>

第06步:编写界面,session没数据,拦截器不通过

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
</head>
<body>
    <%
        request.getSession().removeAttribute("user");
    %>
    <center>
        没有用户<BR>
        <a href="list_login.action">用户登录action!</a><BR>
        <a href="list_addUser.action">添加用户action!</a><BR>
    </center>
    <br>
</body>
</html>

第07步:编写通过显示界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
</head>
<body>
    <center>
    登录信息:message:${message }
    </center>
    <br>
</body>
</html>

第08步:编写不通过错误界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
</head>
<body>
    <center>
        拦截信息:message:${message }<BR>
        拦截器不能使用错误!
    </center>
</body>
</html>

注意:需要导入包

时间: 2024-10-20 04:20:20

struts自定义拦截器的相关文章

struts自定义拦截器--登录权限控制

说明:该自定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.总体的步骤: (1).定义拦截器类.LoginInterceptor(完成登录拦截) 方式1:实现com.opensymphony.xwork2.interceptor.Interceptor接口并覆写方法. 方式2:继承com.opensymphony.xwork2.interceptor.AbstractIntercep

struts自定义拦截器配置

配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开struts-default.xml搜索下interceptor:系统里的拦截器有很多,拦截器都是放在堆栈里的,系统引用的是默认堆栈, <interceptor-stack name="defaultStack">: struts2.3版本下的默认堆栈里放有19个拦截器.我们随便找一个系统拦截器,找到那个类点进去,可以看到,系统的拦截器都继承自AbstractInterceptor,知道这些,那么我们可以自己创建

struts之拦截器

拦截器是为了让一些自己不希望发生的事情进行预防,下面我说一下struts自定义拦截器. 下面我贴下struts.xml里的自己定义的拦截器: <package name="my" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="util.MyInterceptor" /> &l

struts登录案例和自定义拦截器

struts登录案例:struts.xml<struts> <constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="messages"></constant> <package name="basic" ext

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Struts学习之自定义拦截器

* 所有的拦截器都需要实现Interceptor接口或者继承Interceptor接口的扩展实现类    * 要重写init().intercept().destroy()方法        * init()是在struts2框架运行时执行,在拦截器的生命周期中只执行一次,可以做必要的内容的初始化工作        * intercept(),是每一次请求就执行一次,做相关处理工作.            * intercept()方法接收一个ActionInvocation接口的实例     

struts2学习笔记---自定义拦截器

什么是拦截器? struts2中拦截器分为Struts2定义好的拦截器和自定义的拦截器.其作用是在一个Action执行之前进行拦截,在Action执行之后又加入某些操作. 实现原理 当请求一个Action时,struts2会查找配置文件,并根据这个Action的配置实例化对应的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器. 拦截器的执行流程 1.对Action进行预处理.(正序执行) 2.拦截器自身决定该不该执行后续的拦截器(由invoke()方法的返回值决定).

struts2基础----&gt;自定义拦截器

这一章,我们开始struts2中拦截器的学习.内容较浅,慎看. 自定义拦截器 一.增加一个自定义的拦截器为类 package com.huhx.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class RegisterInterceptor extends AbstractInt

struts2 文件的上传下载 表单的重复提交 自定义拦截器

文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type=“file”> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤:1. 在 Jsp 页面的文件上传表单里使用