Struts2配置拦截器

配置拦截器有三个步骤:

第一:先创建一个拦截器的包

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>

猜你喜欢

转载自blog.csdn.net/jinqianwang/article/details/82148300