Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更方便

---------------------------------华丽的分割线---------------------------------------

从一个简单的DEMO入手,正常情况下,客户端可以直接访问我的Action,但是我不想让他们访问,就在Struts2和Action之间架设一道拦截器Interceptor。在用户直接访问我的Action时做出验证,看你是否已经用name="hh"的信息登陆(登录信息放在Session),如果已经登陆,启动拦截,不让你二次访问,如果没有登陆直接放行。

第一步:

MyInterceptor类要继承AbstractInterceptor父类,并实现intercept重载,代码如下:

package com.huohuo.interceptor;

import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor {
public String name;
@Override
public String intercept(ActionInvocation ai) throws Exception {
// TODO Auto-generated method stub String url = ServletActionContext.getRequest().getRequestURI().toString();
System.out.println(url);
Map session = ai.getInvocationContext().getSession(); if(url.indexOf("loginAction")!=-1)
{
if(session.get("name")!=null)
{
name=session.get("name").toString();
System.out.println("Interceptor"+name);
if(name.equals("hh"))
{
return "interceptor"; //返回result name="interceptor"的JSP页面
} } } return ai.invoke(); //让程序继续执行 } }

第二步:

写LoginAction类

package com.huohuo.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{
private String name;
private Map<String,Object> session; public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> session) {
this.session = session;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String execute()
{
session.put("name", name);
System.out.println("action----"+name);
return SUCCESS;
}
}

第三部:配置struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <constant name="struts.devMode" value="true" />
<!--Action配置 --> <package name="default" namespace="/" extends="struts-default"> //自定义拦截器和Action写在同一个package下
<interceptors>
<interceptor name="myInterceptor" class="com.huohuo.interceptor.MyInterceptor"></interceptor> //添加自己的拦截器
      <interceptor-stack name="myInterceptorStack"> //配置一个interceptor stack
      <interceptor-ref name="myInterceptor"/>
     <interceptor-ref name="defaultStack"/> //这个必须要有,添加自己的拦截器会让默认的拦截器失效,所以要添加
     </interceptor-stack>
  </interceptors> <action name="loginAction" class="com.huohuo.action.LoginAction">
<interceptor-ref name="myInterceptorStack"></interceptor-ref>
<result name="interceptor">/interceptor.jsp</result>
<result>/success.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts>

第四步:配置好自己的JSP页面,就可以成功拦截。

最新文章

  1. 【FTP】FTP文件上传下载-支持断点续传
  2. orace 取昨天凌晨的日期
  3. 查看macbook是多少位
  4. 客户端发包 GS端接收
  5. [转载]C#中播放背景音乐几种的方法
  6. JS中比較2个字符串内元素的不同(字符1, 字符2, 分隔符可选)
  7. POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)
  8. jeety and tomcat plugins In Maven
  9. Linux常用操作命令(一)
  10. Linux命令—压缩及其他
  11. .Net core----mongodb在插入数据时,会产生时间差的问题
  12. Beta(2/7)
  13. sscanf、sprintf、stringstream常见用法
  14. ES基本查询
  15. day76
  16. 合并ts文件
  17. WPF几种高级绑定
  18. osql执行数据库查询命令并保存到txt文件
  19. ASP.NET Core 2 学习笔记(三)中间件
  20. React Hooks useState为什么顺序很重要

热门文章

  1. 24、ASP.NET MVC入门到精通——数据库仓储
  2. js事件浅析
  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(五)地图切换以及图层显示模块
  4. 安装Portal for ArcGIS时如何正确配置HTTPS证书
  5. eclipse整体设置
  6. 详解tintColor属性
  7. FMDB第三方框架
  8. python之ATM
  9. Adobe AIR 中为不同尺寸和分辨率屏幕适配
  10. 学习Maven之Properties Maven Plugin