=============================java==============
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.zr.pojo.aged.home.ZaghUsers;
public class UtilInterceptor implements Interceptor {
/**
* 实现登录拦截
*/
private static final long serialVersionUID = -532172353763647921L;
public void destroy() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
String methodName=null;
Map map = invocation.getInvocationContext().getParameters();
if (map == null || map.size() == 0) {
System.out.println("0");
} else {
String[] keys = new String[map.size()];
map.keySet().toArray(keys);
for (int i = 0; i < keys.length; i++) {
if (map.get(keys[i]) != null) {
String[] values = (String[])map.get(keys[i]);
for (int j = 0; j < values.length; j++) {
methodName=values[0];
}
}
}
}
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
// 取出名为user的session属性
ZaghUsers user = (ZaghUsers) session.get("userbean");
// 如果没有登陆,返回重新登陆
if (user != null||(methodName!=null&&methodName.equalsIgnoreCase("User.checkUserLogin"))||(methodName!=null&&methodName.equalsIgnoreCase("Home.index"))) {
return invocation.invoke();
} else {
return "/index.jsp";
}
//return invocation.invoke();
}
// @Override
// protected String doIntercept(ActionInvocation invocation) throws Exception {
// ActionProxy proxy=invocation.getProxy();
// String methodName=proxy.getMethod();
// Method method=null;
// method = proxy.getAction().getClass().getMethod(methodName, new Class[0]);
//// String methodName=proxy.getClass().getMethod(name, parameterTypes);
// // 取得请求相关的ActionContext实例
// ActionContext ctx = invocation.getInvocationContext();
// Map session = ctx.getSession();
// // 取出名为user的session属性
// ZaghUsers user = (ZaghUsers) session.get("userbean");
// // 如果没有登陆,返回重新登陆
// if (user != null||methodName.equalsIgnoreCase("checkUserLogin")) {
// return invocation.invoke();
// } else {
// return "/tpl/html//home/Home/index.jsp";
// }
// }
}
=====================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>
<!--*********************struts2 constant************************ -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.custom.i18n.resources" value="messages"/>
<constant name= "struts.multipart.maxSize" value="52428800" />
<package name="default" extends="struts-default" >
<result-types>
<result-type name="direct" class="com.gctx.framework.struts2.dispatcher.DirectResultDispatcher"/>
</result-types>
<!-- 定义一个名为 authority的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="requestAction"
class="com.gctx.web.action.home.UtilInterceptor" />
<!-- 定义一个包含权限检查的拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含authority拦截器 需要过滤的方法 index 要加在此 -->
<interceptor-ref name="requestAction">
<param name="excludeMethods">*.index,*.checkUserLogin</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置全局默认的拦截器栈-->
<default-interceptor-ref name="myDefaultStack" />
</package>
<package name="all" extends="default">
<result-types>
<result-type name="direct" class="com.gctx.framework.struts2.dispatcher.DirectResultDispatcher"/>
</result-types>
<action name="*" class="com.gctx.web.action.GenericBaseAction" >
<result name="*" type="direct">direct</result>
</action>
</package>
</struts>
分享到:
相关推荐
本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的原理和实践应用。 首先,让我们理解一下拦截器的概念。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序对Action调用进行...
3. 在Struts2的配置文件(struts.xml)中声明并配置拦截器,指定拦截器的执行顺序和作用范围。 **四、拦截器的配置** Struts2的拦截器可以通过XML或注解两种方式进行配置: - XML配置:在`struts.xml`文件中,...
本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现用户权限拦截。 首先,我们需要了解拦截器的工作原理。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截...
3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...
2. **配置拦截器**:在`struts.xml`配置文件中定义拦截器,指定其执行顺序和关联的Action。 3. **注册拦截器**:将自定义拦截器加入到`struts-default`或`struts-plugin`拦截器栈中,或者创建新的拦截器栈并应用到...
3. 依据配置的Interceptor Stack(拦截器栈),Struts2会按顺序调用每个拦截器的`intercept`方法。 4. 在`intercept`方法中,通常会先调用`ActionInvocation`的`invoke`方法,这将执行下一个拦截器或者直接执行...
此外,Action类还可以通过注解来配置拦截器,例如`@Namespace`、`@Action`等。 在案例的文件名"struts2Study"中,我们可以推测这可能是一个包含了整个Struts2应用的源码结构,包括Struts2的配置文件(struts.xml)...
- `struts.xml`是Struts2的主配置文件,用于全局配置拦截器、包、Action等。在这里,我们看到配置了一个名为`login`的自定义拦截器,其类为`interceptor.StrutsLoginInterceptor`。 - 使用`interceptor-stack`来...
在Struts2配置中,我们需要将这个拦截器添加到拦截器栈中,通常是在`struts.xml`文件中。这样,每次请求到达Action之前,都会先经过这个拦截器: ```xml <struts> ...
在Struts2的核心配置文件`struts.xml`中,我们可以定义拦截器链,指定哪些拦截器应用于哪些Action。 权限控制是web应用中不可或缺的一部分,它可以防止未经授权的用户访问特定资源。在Struts2中,我们可以通过拦截...
1. **配置问题**:如果Struts2的配置文件(struts.xml或struts.properties)中拦截器配置有误,可能会导致拦截器链无法正常工作,从而影响到Result的执行。 2. **拦截器逻辑错误**:如果自定义的拦截器在处理过程中...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
3. 在调用Action之前,Struts2会按照配置的顺序依次执行拦截器链。 4. 每个拦截器可以决定是否允许请求继续传递到下一个拦截器或直接终止。例如,一个登录拦截器可能会检查用户是否已登录,如果未登录则跳转到登录...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
2. **配置拦截器**:然后,在Struts2的配置文件(通常为`struts.xml`或`struts-default.xml`)中注册这个拦截器。 ```xml <!-- 其他拦截器配置 --> <default-interceptor-ref name="defaultStack"/> <!-- 引入...
接下来是在`struts.xml`文件中配置拦截器: ```xml <struts> <package name="strutsqs" extends="struts-default"> <param name="name">simple <result name="input">/login.jsp ...
在Struts2中,拦截器的使用主要基于两个方面:配置文件中的声明式使用和注解的编程式使用。首先,我们来看看配置文件中的声明式使用。在struts.xml或类似的配置文件中,你可以通过`<interceptor>`元素定义拦截器,并...
了解了拦截器的基本原理后,我们可以通过`Struts2.x 拦截器.avi`这个视频文件深入学习Struts2拦截器的实现细节,比如如何编写自定义拦截器、如何配置拦截器链、如何处理异常等。`readme.txt`可能是关于这个主题的...
当一个请求被发送到Struts2框架时,拦截器会按照配置的顺序依次对请求进行处理。每个拦截器都有`intercept()`方法,这个方法会在动作执行前和执行后被调用,允许开发者插入预处理和后处理逻辑。 **2. 拦截器的工作...