Struts2 Interceptor学习
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页面,就可以成功拦截。