`

struts2拦截器

阅读更多
1. struts2拦截器简介

拦截器简介
Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。
优点:通用功能的封装,提供了可重用性;

新建项目HeadFirstStruts2Chap03

   
2. struts2预定义拦截器和拦截器栈

HelloAction.java

package com.andrew.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String execute() throws Exception {
        System.out.println("执行了HelloAction的默认方法");
        return SUCCESS;
    }
}

MyInterceptor.java

package com.andrew.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyInterceptor implements Interceptor {
    public void init() {
        System.out.println("MyInterceptor初始化");
    }
    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("在Action执行之前");
        String result = invocation.invoke();
        System.out.println("result:" + result);
        System.out.println("在Action执行之后");
        return result;
    }
    public void destroy() {
        System.out.println("MyInterceptor销毁");
    }
}

struts.xml

<package name="manage" namespace="/" extends="struts-default">
      <interceptors>
          <interceptor name="myInterceptor" class="com.andrew.interceptor.MyInterceptor"></interceptor>
      </interceptors>
      <action name="hello" class="com.andrew.action.HelloAction">
          <result name="success">success.jsp</result>
          <interceptor-ref name="myInterceptor"></interceptor-ref>
          <interceptor-ref name="defaultStack"></interceptor-ref>
      </action>
</package>

success.jsp

Name:${name }

MyInterceptor初始化
http://localhost:8080/HeadFirstStruts2Chap03/hello?name=struts2
运行结果:
Name:struts2 
控制台:
在Action执行之前
执行了HelloAction的默认方法
result:success
在Action执行之后


3. 自定义拦截器-登录验证拦截器

User.java

package com.andrew.model;
public class User {
    private String userName;
    private String password;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

UserService.java

package com.andrew.service;
import com.andrew.model.User;
public class UserService {
    public boolean login(User user) {
        if ("andrew".equals(user.getUserName()) && "123456".equals(user.getPassword())) {
            return true;
        } else {
            return false;
        }
    }
}

UserAction.java

package com.andrew.action;
import java.util.Map;
import com.andrew.model.User;
import com.andrew.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
    private UserService userService = new UserService();
    private User user;
    private String error;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    @Override
    public String execute() throws Exception {
        if (userService.login(user)) {
            ActionContext actionContext = ActionContext.getContext();
            Map<String, Object> session = actionContext.getSession();
            session.put("currentUser", user);
            return SUCCESS;
        } else {
            this.error = "用户名或密码错误";
            return "error";
        }
    }
}

GrilAction.java

package com.andrew.action;
import com.opensymphony.xwork2.ActionSupport;
public class GrilAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("GrilAction execute方法执行!");
        return SUCCESS;
    }
}

MyInterceptor.java

package com.andrew.interceptor;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class LoginInterceptor implements Interceptor {
    public void init() {
        System.out.println("LoginInterceptor初始化");
    }
    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("在Action执行之前");
        ActionContext actionContext = invocation.getInvocationContext();
        Map<String, Object> session = actionContext.getSession();
        Object currentUser = session.get("currentUser");
        String result = null;
        if (currentUser != null) {
            result = invocation.invoke();
        } else {
            HttpServletRequest request = (HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
            request.setAttribute("error", "请先登录!");
            result = "error";
        }
        System.out.println("result:" + result);
        System.out.println("在Action执行之后");
        return result;
    }
    public void destroy() {
        System.out.println("LoginInterceptor销毁");
    }
}

struts.xml

<package name="manage" namespace="/" extends="struts-default">
    <interceptors>
        <interceptor name="loginInterceptor" class="com.andrew.interceptor.LoginInterceptor"></interceptor>
        <interceptor-stack name="loginStack">
            <interceptor-ref name="loginInterceptor"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="loginStack"></default-interceptor-ref>
    <global-results>
        <result name="error">error.jsp</result>
    </global-results>
    <action name="user" class="com.andrew.action.UserAction">
        <result name="success">success.jsp</result>
        <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>
    <action name="gril" class="com.andrew.action.GrilAction">
        <result name="success">success.jsp</result>
    </action>
</package>

success.jsp

当前用户:${currentUser.userName }

login.jsp

<form action="user" method="post">
    用户名:<input type="text" name="user.userName"/>
    密码:<input type="password" name="user.password"/>
    <input type="submit" value="登录"/>
</form>

error.jsp

错误信息:${error }  <a href="login.jsp">登录</a>

LoginInterceptor初始化
http://localhost:8080/HeadFirstStruts2Chap03/login.jsp
123 123 submit
运行结果:
错误信息:用户名或密码错误 登录 
http://localhost:8080/HeadFirstStruts2Chap03/gril
运行结果:
错误信息:请先登录! 登录 
控制台:
在Action执行之前
result:error
在Action执行之后

http://localhost:8080/HeadFirstStruts2Chap03/login.jsp
andrew 123456 submit
运行结果:
当前用户:andrew
http://localhost:8080/HeadFirstStruts2Chap03/gril
运行结果:
当前用户:andrew 
控制台:
在Action执行之前
GrilAction execute方法执行!
result:success
在Action执行之后
分享到:
评论

相关推荐

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    Struts2拦截器及其用法详细说明

    在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...

    Struts2拦截器(Interceptor)

    Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    详解Struts2拦截器

    ### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...

    struts2 拦截器实例

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    struts2拦截器的使用方法

    ### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...

    struts2拦截器应用小例子

    当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...

    Struts2拦截器.ppt

    Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt

    Struts2拦截器原理分析

    拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...

    struts2拦截器实现拦截不文明字迹

    拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...

    Struts2 拦截器注解(二十七)

    拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...

    Struts2 拦截器的执行顺序(二十九)

    这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...

    struts2 拦截器实现登录控制

    这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...

    struts2拦截器和验证框架(适合初学者-经藏版)

    ### Struts2 拦截器与验证框架详解 #### 一、Struts2概述 Struts2是一个基于Java的企业级Web应用开发框架,它继承了Struts1的优点,并在此基础上进行了很多改进,使得开发更加灵活高效。Struts2的核心是拦截器...

    Struts2拦截器源程序

    在Struts2中,拦截器扮演着至关重要的角色,它们是实现MVC(Model-View-Controller)架构的关键组件之一。拦截器允许开发者在动作执行前后插入自定义逻辑,比如日志记录、权限检查、数据验证等,而无需修改核心业务...

Global site tag (gtag.js) - Google Analytics