配置拦截器有三个步骤:
第一:先创建一个拦截器的包
com.bdqn.interceptor
package com.bdqn.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class HelloInterceptor extends AbstractInterceptor{
//这就是拦截器的方法
@Override
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("在执行MyAction的方法前进行拦截");
String obj = arg0.invoke();//代表事物,这里是action的方法
System.out.println("在跳出action的方法之后再次进行拦截!");
return obj;
}
}
第二:然后在Struts2配置文件里面进行配置
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 为自己创建的拦截器配置 -->
<interceptor name="hellointerceptor" class="com.bdqn.interceptor.HelloInterceptor"></interceptor>
<interceptor-stack name="myfriststack">
<interceptor-ref name="hellointerceptor"></interceptor-ref>
<!-- 默认的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="MyAction" class="com.bdqn.action.MyAction"
method="Hello">
<!-- 引用拦截器栈 -->
<interceptor-ref name="myfriststack"></interceptor-ref>
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
第三:在要引用拦截器的配置里面进行配置
<action name="MyAction" class="com.bdqn.action.MyAction"
method="Hello">
<!-- 引用拦截器栈 -->
<interceptor-ref name="myfriststack"></interceptor-ref>
<result name="success">/index.jsp</result>
</action>
制作一个用户登录权限验证,只能通过登录的路径到达我的商品首页,不然就跳入登录页面
实现原理:
登录成功的用户,存入session,设置商品首页拦截器,只要是访问该链接地址前,先查询session是否有用户存钻,假如有就允许访问,没有就调用商品首页的error页面
第一步:设置登录表单
<form action="/Struts2拦截器配置/UsersAction.java/loginAction">
name:<input type="text" name="users.name"><br/>
pass:<input type="text" name="users.pass"><br/>
<input type="submit" value="提交"><br/>
</form>
第二步:设置登录处理action
package com.bdqn.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.bdqn.entity.Users;
import com.opensymphony.xwork2.ActionSupport;
public class UsersAction extends ActionSupport implements SessionAware{
private Users users;
private Map session;
//登录方法成功就把用户存入session
public String login() throws Exception {
if (("jin").equals(users.getName())&&("123").equals(users.getPass())) {
session.put("user", users);
return SUCCESS;
}
return ERROR;
}
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session = session;
}
public Map getSession() {
return session;
}
}
第三步:登录显示商品首页action
package com.bdqn.action;
import com.opensymphony.xwork2.ActionSupport;
public class GoodsAction extends ActionSupport{
public String getGoods() throws Exception {
return SUCCESS;
}
}
第四步:拦截器
package com.bdqn.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoginInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("登陆拦截");
Map session = arg0.getInvocationContext().getSession();
System.out.println(session.get("user"));
if (session.get("user")!=null) {
return arg0.invoke();
}
return Action.ERROR;
}
}
第五步设置Struts2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 为自己创建的拦截器配置 -->
<interceptor name="logininterceptor" class="com.bdqn.interceptor.LoginInterceptor"></interceptor>
<!-- login -->
<interceptor-stack name="logininterceptor">
<interceptor-ref name="logininterceptor"></interceptor-ref>
<!-- 默认的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<!-- 用户登录权限 -->
<action name="loginAction" class="com.bdqn.action.UsersAction"
method="login">
<!-- 引用拦截器栈 -->
<result name="success" type="redirectAction">goodsAction</result>
<result name="error">/login.jsp</result>
</action>
<action name="goodsAction" class="com.bdqn.action.GoodsAction"
method="getGoods">
<interceptor-ref name="logininterceptor"></interceptor-ref>
<result name="success">/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>