发布网友 发布时间:1天前
共1个回答
热心网友 时间:15小时前
使用拦截用户的每一步操作。
首先是 actions 包里的类 (2个 action ,一个)
1.CheckLoginInterceptor
Java代码
/*************************************************
@Copyright (C), 2008, lzpeng
@File name: CheckLoginInterceptor.java
@Author: lzpeng
@CreateDate: 2008-6-17
@Description: CheckLoginInterceptor
@Extends: AbstractInterceptor
@Function List:
1. public String intercept()
*************************************************/
package cn.com.lzpeng.actions;
import java.util.Map;
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 = 1L;
public static final String USER_SESSION_KEY="user";
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("begin check login interceptor");
// 对LoginAction不做该项拦截
Object action = actionInvocation.getAction();
if (action instanceof LoginAction) {
System.out
.println("exit check login, because this is login action.");
return actionInvocation.invoke();
}
// 验证 session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String) session.get(USER_SESSION_KEY);
if (username != null) {
// 存在的情况下进行后续操作。
System.out.println(username+" already login!");
return actionInvocation.invoke();
} else {
// 否则终止后续操作,返回LOGIN
System.out.println("no login, forward login page!");
return Action.LOGIN;
}
}
}
/*************************************************
@Copyright (C), 2008, lzpeng
@File name: CheckLoginInterceptor.java
@Author: lzpeng
@CreateDate: 2008-6-17
@Description: CheckLoginInterceptor
@Extends: AbstractInterceptor
@Function List:
1. public String intercept()
*************************************************/
package cn.com.lzpeng.actions;
import java.util.Map;
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 = 1L;
public static final String USER_SESSION_KEY="user";
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("begin check login interceptor");
// 对LoginAction不做该项拦截
Object action = actionInvocation.getAction();
if (action instanceof LoginAction) {
System.out
.println("exit check login, because this is login action.");
return actionInvocation.invoke();
}
// 验证 session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String) session.get(USER_SESSION_KEY);
if (username != null) {
// 存在的情况下进行后续操作。
System.out.println(username+" already login!");
return actionInvocation.invoke();
} else {
// 否则终止后续操作,返回LOGIN
System.out.println("no login, forward login page!");
return Action.LOGIN;
}
}
}
struts.xml
Java代码
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 加载默认的 struts2 配置文件 -->
<include file="struts-default.xml" />
<!-- 继承默认的 struts2 配置文件 -->
<package name="default" extends="struts-default">
<!-- 定义一个名为 checkLogin 的 -->
<interceptors>
<!-- 定义权限检查 -->
<interceptor name="checkLogin"
class="cn.com.lzpeng.actions.CheckLoginInterceptor" />
<!-- 定义一个包含权限检查的栈 -->
<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()
-->
<action name="login"
class="cn.com.lzpeng.actions.LoginAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<result name="login">login.jsp</result>
<!--一般配置在 result 元素之后 -->
<interceptor-ref name="myDefaultStack" />
</action>
<action name="testInterceptor"
class="cn.com.lzpeng.actions.TestInterceptorAction">
<result name="success">content.jsp</result>
<result name="login">login.jsp</result>
</action>
</package>
</struts>