`
xiangxingchina
  • 浏览: 520261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts 2 中增加拦截器

阅读更多

吃完午饭了,公司食堂真垃圾,点了份白切鸡 尽是鸡皮和鸡脖子,就4块肉,下面还垫了层香菜~~~~~~
   好了,继续来说下午的拦截器,在上午的基础上加了拦截器
   1.改装了下struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" namespace="/login" extends="struts-default">
<!-- 定义一个名为 checkLogin 的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->  
<interceptor name="checkLogin" class="com.intohotel.interceptor.CheckLoginInterceptor"></interceptor>
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含checkLogin拦截器 -->
<interceptor-ref name="checkLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<!-- 定义全局Result -->  
    <global-results>  
        <!-- 当返回login视图名时,转入/login.jsp页面 -->  
        <result name="login">/login.jsp</result>  
    </global-results> 
    <!--      
          action 标签里 name属性代表我们要处理的.action的前面部分     
            action 标签里 class属性代表我们需要哪个类来处理     
           result 标签的 name属性代表action类的执行方法的返回值,     
          action类的默认执行方法是public String execute()   
          method 是类里面对应的方法
        -->
<action name="login" method="login" class="com.intohotel.action.LoginAction">
<result name="success">/result.jsp</result>
<result name="input">/login.jsp</result>
<result name="failer">/login.jsp</result>
<!--拦截器一般配置在 result 元素之后  -->  
<interceptor-ref name="myDefaultStack" />  
</action>
</package>
</struts>
 
    2.建立CheckLoginInterceptor.java类
package com.intohotel.interceptor;

import java.util.Map;

import com.intohotel.action.LoginAction;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CheckLoginInterceptor extends AbstractInterceptor{

/**
*
*/
private static final long serialVersionUID = -172631651095541060L;
public static final String UESER_SESSION_KEY = "user";
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Object action = actionInvocation.getAction();
System.out.println("=======进入登陆拦截器");
if(action instanceof LoginAction){
System.out.println("=======该方法是登陆方法");
return actionInvocation.invoke();
}

//验证session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String)session.get(UESER_SESSION_KEY);

if(username!=null){
//存在的情况下进行后续操作
System.out.println(username+"=====已登陆");
return actionInvocation.invoke();

}else {
// 否则终止后续操作,返回LOGIN  
System.out.println("=====尚未登陆");
return Action.LOGIN;
}
}

}
      3.在LoginAction.java中增加seesion设置
google了下
Struts2中Session的使用有2种方法 这里我选择了org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作

等下把那文章贴出来
这里登陆类修改下 登陆后讲用户的姓名设进seesion中
package com.intohotel.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.intohotel.interceptor.CheckLoginInterceptor;
import com.opensymphony.xwork2.ActionSupport;
/**
* 因为这个action将会以单独的线程执行,所以你不能用ActionContext,因为它是ThreadLocal.
* 这也就是说如果你要访问session数据,
* 你必须实现 SessionAware结构而不是调用ActionContext.getSesion()
* @author heilwolf
*
*/

public class LoginAction extends ActionSupport implements SessionAware {
/**
*
*/
private static final long serialVersionUID = 7777814042861093731L;
private String username;
private String password;

private Map<String , String> session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

public void setSession(Map session) {  
        this.session = session;  
    }  

public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

/**
* 类里默认的方法 测试struts.xml里 method未指定的话,进入此默认方法
*/
public String execute(){
System.out.println("=======hello 你进入了struts默认的的登陆方法");
if("heilwolf".equals(this.getUsername().trim()) && "123456".equals(this.getPassword())){
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}

}

/**
* 登陆的方法,判断用户名密码 用户名:heilwolf 密码:123456
* @return
*/
public String login(){
System.out.println("=======hello 你进入了heilwolf的登陆方法!");
String name=this.getUsername();
String password=this.getPassword();
if("heilwolf".equals(name.trim()) && "123456".equals(password)){
session.put(CheckLoginInterceptor.UESER_SESSION_KEY, name);
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}

}

/**
* 一个验证器 登陆的时候会先进行验证
*/
public void validate(){
System.out.println("=======hello 你进入了heilwolf重写的验证器!");
if(null==this.getUsername() || "".equals(this.getUsername().trim())){
this.addFieldError("username", "username error");
}
if(null==this.getPassword() || "".equals(this.getPassword().trim())){
this.addFieldError("password", "password error");

}

}

}

ok!运行登陆后控制台打印

=======进入登陆拦截器
=======该方法是登陆方法
2008-9-4 14:39:39 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
=======hello 你进入了heilwolf重写的验证器!
=======hello 你进入了heilwolf的登陆方法!

看到有拦截器后的执行顺序了吧

相关文章记录:
http://www.blogjava.net/max/archive/2006/12/06/85925.html
http://www.java3z.com/cwbwebhome/article/article2/2933.html?id=1626

分享到:
评论

相关推荐

    struts2拦截器

    在Struts2中,拦截器(Interceptor)是核心功能之一,用于增强应用的功能和处理业务逻辑。拦截器是基于AOP(面向切面编程)的概念,可以在动作执行前后插入额外的操作,比如日志记录、权限检查、数据验证等。 标题...

    Struts2的拦截器的使用详解

    1. 拦截器栈:Struts2中的拦截器不是单独工作的,而是以栈的形式存在,称为拦截器栈。每个拦截器都有一个进入方法(invoke)和一个退出方法,当请求到达时,会按照栈的顺序逐个调用进入方法,直到到达目标Action;...

    使用struts拦截器+注解实现日志审计功能

    在Struts 2中,拦截器(Interceptors)是一个强大的特性,可以用于实现各种功能,如权限检查、日志记录、事务管理等。本文将详细介绍如何利用Struts拦截器和注解来实现日志审计功能。 首先,我们需要了解Struts拦截...

    Struts2拦截器实例.docx

    本文档将详细介绍如何在Struts2框架中创建一个登录验证拦截器,以确保除了登录请求外,所有其他请求都会被拦截,并检查用户的登录状态。 #### 登录校验拦截器的工作原理 登录校验拦截器的主要作用是检查用户是否...

    Struts 2的拦截器

    2. **配置拦截器**: 在Struts2的配置文件(如`struts.xml`或`struts-default.xml`)中,使用`&lt;interceptors&gt;`标签定义拦截器,`&lt;interceptor&gt;`标签定义单个拦截器,通过`name`属性指定拦截器名,`class`属性指定拦截...

    struts2的核心.拦截器(拦截器的实现与定义让你轻松入门)

    提到拦截器,使我不得不想起武侠剧中劫匪们常说的一句话:“此山是我开,此树是我栽,要打此路过,留下买路财!”。难不成程序中也有“打劫”的,说的没错,拦截器就是个打劫的。在现实生活中,劫匪劫的大都是钱财,...

    基于ssh拦截器框架Struts2拦截器的登录验证实现

    SSH2 框架中的 Struts2 拦截器功能允许开发者在特定操作执行前或执行后进行自定义处理,例如登录验证、权限检查等。在本文中,我们将探讨如何使用 Struts2 的拦截器来实现登录验证功能。 首先,我们需要了解 Struts...

    struts2登录拦截器

    在Struts2框架中,拦截器是一种重要的机制,用于在执行Action之前或之后进行某些操作,比如验证用户身份、日志记录等。登录拦截器则是其中一种常用的拦截器类型,它主要用于确保只有经过认证的用户才能访问特定的...

    struts2拦截器实现用户登录权限的验证

    - **拦截器(Interceptor)**:在Struts2框架中,拦截器是一种可以被用来执行预处理和后处理操作的对象。它们可以在Action执行前后进行拦截,并执行相应的逻辑处理。 - **用户登录验证**:在用户尝试访问某些受保护...

    struts拦截器实现

    在Struts2的配置文件(通常为struts.xml)中,我们需要声明并配置拦截器。例如: ```xml *" class="com.example.MyAction"&gt; &lt;param name="interceptor.excludeParams"&gt;password ``` 上述...

    struts2中文学习文档

    这些特性后来都被融入到了Struts2中,使得Struts2不仅继承了WebWork的优点,还在此基础上进行了改进和扩展,成为了更加强大和灵活的框架。 ### Struts2的关键特性 1. **拦截器机制**:这是Struts2的核心概念之一,...

    struts2 API帮助文档

    - OGNL是Struts2中的表达式语言,用于在Action和视图之间传递数据。它可以访问对象的属性,执行方法,甚至进行复杂的运算和控制结构。 7. **插件(Plugins)** - Struts2支持多种插件来扩展功能,如Struts2-dojo-...

    信息系统软件设计:第3章 Struts2.0-拦截器.ppt

    - **AOP实现**:Struts2通过拦截器实现了面向切面编程,可以在不修改Action代码的情况下增加新的功能。 **2. 拦截器与Action的关系** - 拦截器在Action执行前和结果渲染后介入,可以处理如参数封装、异常处理、权限...

    JSP 开发之Struts2内建自定义拦截器

    在Struts2中,拦截器(Interceptor)扮演着关键角色,它们允许开发者在Action执行前后插入自定义逻辑,增加了框架的灵活性和可扩展性。在JSP开发中,理解并熟练使用Struts2的内建自定义拦截器对于优化应用性能和增强...

    struts1和struts2的区别

    - **Struts2**: 支持为每个Action定义不同的拦截器堆栈(Interceptor Stacks),这意味着可以根据不同的Action来配置不同的拦截器组合,增加了灵活性。 通过上述对比可以看出,Struts2相比Struts1在很多方面进行了...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    - **拦截器机制**:Struts2中的拦截器类似于Servlet中的过滤器,但更加轻量级,可以在不修改业务代码的情况下增加功能,如文件上传、输入验证等。 - **类型转换**:Struts2提供了一套强大的类型转换机制,能够将用户...

    struts2拦截器demo1

    (2)拦截器组件可以继承AbstractIntercepter类(实现了Intercepter接口)。 (3)拦截器组件可以继承MethodFilterIntercepter类(继承自AbstractIntercepter),增加了方法过滤功能(上面两种方式是拦截所有方法,这个...

    struts2框架源码

    3. **Interceptor(拦截器)**:拦截器是Struts2的一个关键特性,它允许开发者在Action执行前后插入自定义的处理逻辑。例如,日志记录、权限检查、数据验证等都可以通过拦截器实现。拦截器链的执行顺序由配置决定。 ...

Global site tag (gtag.js) - Google Analytics