struts2配置自定义拦截器

本文介绍了一个Struts2应用中自定义拦截器的配置方法,包括拦截器栈的定义、全局结果配置及Action配置等内容。展示了如何通过自定义拦截器实现登录检查功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?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>
	<package name="UserAction" extends="struts-default" namespace="/">
	<!-- 【拦截器配置】 -->
		<interceptors>
			<interceptor name="loginCheck" class="com.hyxd.Interceptor.UserCheckInterceptor"></interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="loginCheck"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 【执行拦截器:第一种写法: 当前包下所有的acntion都执行myStack栈】
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		-->
	<!-- 全局定义 -->
		<global-results>
			<result name="error">/error.jsp</result>
			<result name="input">/login.jsp</result>
		</global-results>
		<!-- 第一个action -->
		<action name="user_*" class="com.hyxd.action.UserAction" method="{1}">
				<!-- redirectAction 不会保留request对象 -->
			<result type="redirectAction" name="{1}">emp_list</result>  	 
		</action>
		<!-- 第二个action 接收redirectAction(重定向到新的Action)value=emp_list-->
		<action name="emp_*" class="com.hyxd.action.EmployeeAction" method="{1}">
		<!--第二种写法: 只是在这一个Action中执行myStack栈 
			<interceptor-ref name="defaultStackt"></interceptor-ref>
			<interceptor-ref name="loginCheck"></interceptor-ref>-->
			
		<!-- 第三种写法:执行用户栈(与第二种写法一样, 只在当前aciton中执行自定义栈) -->
		
		<interceptor-ref name="myStack"></interceptor-ref>
		<result name="{1}">/WEB-INF/list.jsp</result>  	 
		</action>
	</package>
</struts>





自定义拦截器

package com.hyxd.Interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class UserCheckInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//获取ActionContext对象
		ActionContext ac = invocation.getInvocationContext();
		// 获取action的代理对象
		ActionProxy proxy = invocation.getProxy();
		//得到代理对象正在运行的方法名
		String methodName = proxy.getMethod();
		if(!"login".endsWith(methodName)){
			//从session中获取用户名
			Object obj = ac.getSession().get("userInfo");
			if(obj==null){
				return "input";
			}else{
				return invocation.invoke();
			}
		}else{
			return invocation.invoke();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值