学习struts2拦截器非常好的一个例子(转载)

actions 包里的类 (2个 action ,一个拦截器)
 1.CheckLoginInterceptor

 

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;

  }

 }

}


2.LoginAction

 

package cn.com.lzpeng.actions;

import com.opensymphony.xwork2.ActionSupport;
import cn.com.lzpeng.entity.UserBean;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;

public class LoginAction extends ActionSupport implements SessionAware {
 private static final long serialVersionUID = 1L;

 private UserBean userBean;

 private Map<String, String> session;

 public UserBean getUserBean() {
  return userBean;
 }

 public void setUserBean(UserBean userBean) {
  this.userBean = userBean;
 }

 @Override
 public String execute() {
  if (userBean == null) {
   return LOGIN;
  }

  String name = userBean.getName();
  String pwd = userBean.getPassword();

  session.put(CheckLoginInterceptor.USER_SESSION_KEY, name);

  if (name.equals("java") && pwd.equals("struts")) {
   return SUCCESS;
  } else {
   return ERROR;
  }

 }

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

}


3.TestInterceptorAction

 

package cn.com.lzpeng.actions;

import com.opensymphony.xwork2.ActionSupport;

public class TestInterceptorAction extends ActionSupport {

 private static final long serialVersionUID = 1L;

 @Override
 public String execute() {
  return SUCCESS;
 }

}


这个是实体类 UserBean.java

 

package cn.com.lzpeng.entity;

public class UserBean {
 private String name;

 private String password;

 public void setName(String name) {
  this.name = name;
 }

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

 public String getName() {
  return name;
 }

 public String getPassword() {
  return password;
 }

}

struts.xml

<!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>


 

最后是 4个 jsp界面

 login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">

  <title>struts2</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 </head>

 <body>
  <!—-
  注意这里action="login.action"
  因为要与Struts.xml里你注册的那个别名叫"login"
    -->
  <form action="login.action" method="post" >
   <fieldset>
    <legend>
     用户登录
    </legend>
    <p align="center">
     帐&nbsp;号:
     <input type="text" name="userBean.name"  />
     <!—-
     注意这里一定要写name="bean.name",
     因为要与LoginAction.java里面定义的bean对应
     name是它的helloWorld的属性
        -->
    </p>
    <p align="center">
     密&nbsp;码:
     <input type="password" name="userBean.password" />
    </p>
    <p align="center">
     <input type="submit" value="登 录" />
    </p>
   </fieldset>
  </form>
 </body>
</html>


success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">

  <title>成功了</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

 </head>

 <body>
  <form action="testInterceptor.action">
   <div align="center">
    恭喜${userBean.name}登录成功了 !
    <br>
    只有通过这才能访问 content.jsp!
    <br>
    <br>
    <input type="submit" value=" content.jsp">
    <br>
    <br>
    主要演示拦截器 CheckLoginInterceptor 对 TestInterceptorAction 的拦截情况(可以试直接访问
    TestInterceptorAction.action)
   </div>
  </form>
 </body>
</html>


error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">

  <title>error</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

 </head>

 <body>
  <div align="center">
   这是一个错误界面 !用以下帐号试试:<br>
   id &nbsp; : java<br>
   password:  struts
  </div>
  <div>
      <a href="login.jsp">返回登录界面</a>
  </div>

 </body>
</html>

 

content.jsp    //为测试 拦截器 写的

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">

  <title>content</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

 </head>

 <body><div align="center">
  这里是 content.jsp!
  <br>
  成功通过拦截器 CheckLoginInterceptor......
  <br>
  复制上边地址 , 在新打开的窗口里粘贴 , 回车试试......
  </div>
 </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值