吃完午饭了,公司食堂真垃圾,点了份白切鸡 尽是鸡皮和鸡脖子,就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中,拦截器(Interceptor)是核心功能之一,用于增强应用的功能和处理业务逻辑。拦截器是基于AOP(面向切面编程)的概念,可以在动作执行前后插入额外的操作,比如日志记录、权限检查、数据验证等。 标题...
1. 拦截器栈:Struts2中的拦截器不是单独工作的,而是以栈的形式存在,称为拦截器栈。每个拦截器都有一个进入方法(invoke)和一个退出方法,当请求到达时,会按照栈的顺序逐个调用进入方法,直到到达目标Action;...
在Struts 2中,拦截器(Interceptors)是一个强大的特性,可以用于实现各种功能,如权限检查、日志记录、事务管理等。本文将详细介绍如何利用Struts拦截器和注解来实现日志审计功能。 首先,我们需要了解Struts拦截...
本文档将详细介绍如何在Struts2框架中创建一个登录验证拦截器,以确保除了登录请求外,所有其他请求都会被拦截,并检查用户的登录状态。 #### 登录校验拦截器的工作原理 登录校验拦截器的主要作用是检查用户是否...
2. **配置拦截器**: 在Struts2的配置文件(如`struts.xml`或`struts-default.xml`)中,使用`<interceptors>`标签定义拦截器,`<interceptor>`标签定义单个拦截器,通过`name`属性指定拦截器名,`class`属性指定拦截...
提到拦截器,使我不得不想起武侠剧中劫匪们常说的一句话:“此山是我开,此树是我栽,要打此路过,留下买路财!”。难不成程序中也有“打劫”的,说的没错,拦截器就是个打劫的。在现实生活中,劫匪劫的大都是钱财,...
SSH2 框架中的 Struts2 拦截器功能允许开发者在特定操作执行前或执行后进行自定义处理,例如登录验证、权限检查等。在本文中,我们将探讨如何使用 Struts2 的拦截器来实现登录验证功能。 首先,我们需要了解 Struts...
在Struts2框架中,拦截器是一种重要的机制,用于在执行Action之前或之后进行某些操作,比如验证用户身份、日志记录等。登录拦截器则是其中一种常用的拦截器类型,它主要用于确保只有经过认证的用户才能访问特定的...
- **拦截器(Interceptor)**:在Struts2框架中,拦截器是一种可以被用来执行预处理和后处理操作的对象。它们可以在Action执行前后进行拦截,并执行相应的逻辑处理。 - **用户登录验证**:在用户尝试访问某些受保护...
在Struts2的配置文件(通常为struts.xml)中,我们需要声明并配置拦截器。例如: ```xml *" class="com.example.MyAction"> <param name="interceptor.excludeParams">password ``` 上述...
这些特性后来都被融入到了Struts2中,使得Struts2不仅继承了WebWork的优点,还在此基础上进行了改进和扩展,成为了更加强大和灵活的框架。 ### Struts2的关键特性 1. **拦截器机制**:这是Struts2的核心概念之一,...
- OGNL是Struts2中的表达式语言,用于在Action和视图之间传递数据。它可以访问对象的属性,执行方法,甚至进行复杂的运算和控制结构。 7. **插件(Plugins)** - Struts2支持多种插件来扩展功能,如Struts2-dojo-...
- **AOP实现**:Struts2通过拦截器实现了面向切面编程,可以在不修改Action代码的情况下增加新的功能。 **2. 拦截器与Action的关系** - 拦截器在Action执行前和结果渲染后介入,可以处理如参数封装、异常处理、权限...
在Struts2中,拦截器(Interceptor)扮演着关键角色,它们允许开发者在Action执行前后插入自定义逻辑,增加了框架的灵活性和可扩展性。在JSP开发中,理解并熟练使用Struts2的内建自定义拦截器对于优化应用性能和增强...
- **Struts2**: 支持为每个Action定义不同的拦截器堆栈(Interceptor Stacks),这意味着可以根据不同的Action来配置不同的拦截器组合,增加了灵活性。 通过上述对比可以看出,Struts2相比Struts1在很多方面进行了...
- **拦截器机制**:Struts2中的拦截器类似于Servlet中的过滤器,但更加轻量级,可以在不修改业务代码的情况下增加功能,如文件上传、输入验证等。 - **类型转换**:Struts2提供了一套强大的类型转换机制,能够将用户...
(2)拦截器组件可以继承AbstractIntercepter类(实现了Intercepter接口)。 (3)拦截器组件可以继承MethodFilterIntercepter类(继承自AbstractIntercepter),增加了方法过滤功能(上面两种方式是拦截所有方法,这个...
3. **Interceptor(拦截器)**:拦截器是Struts2的一个关键特性,它允许开发者在Action执行前后插入自定义的处理逻辑。例如,日志记录、权限检查、数据验证等都可以通过拦截器实现。拦截器链的执行顺序由配置决定。 ...