首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts 二 中增加拦截器

2012-09-19 
struts 2 中增加拦截器吃完午饭了,公司食堂真垃圾,点了份白切鸡 尽是鸡皮和鸡脖子,就4块肉,下面还垫了层香

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" method="login" />??
</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

热点排行