public abstract class MethodFilterInterceptor extends AbstractInterceptor {
protected transient Logger log = LoggerFactory.getLogger(getClass());
protected Set<String> excludeMethods = Collections.emptySet();
protected Set<String> includeMethods = Collections.emptySet();
public void setExcludeMethods(String excludeMethods) {
this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods);
}
public Set<String> getExcludeMethodsSet() {
return excludeMethods;
}
public void setIncludeMethods(String includeMethods) {
this.includeMethods = TextParseUtil.commaDelimitedStringToSet(includeMethods);
}
public Set<String> getIncludeMethodsSet() {
return includeMethods;
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (applyInterceptor(invocation)) {
return doIntercept(invocation);
}
return invocation.invoke();
}
protected boolean applyInterceptor(ActionInvocation invocation) {
String method = invocation.getProxy().getMethod();
// ValidationInterceptor
boolean applyMethod = MethodFilterInterceptorUtil.applyMethod(excludeMethods, includeMethods, method);
if (log.isDebugEnabled()) {
if (!applyMethod) {
log.debug("Skipping Interceptor... Method [" + method + "] found in exclude list.");
}
}
return applyMethod;
}
/**
* Subclasses must override to implement the interceptor logic.
*
* @param invocation the action invocation
* @return the result of invocation
* @throws Exception
*/
protected abstract String doIntercept(ActionInvocation invocation) throws Exception;
}
<!--使用拦截器-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="FilterInterceptor">
<!--拦截器黑白名单-->
<param name="includeMethods">method1</param> 拦截
<param name="excludeMethods">method2</param> 不拦截
<!--指定参数name的值-->
<param name="name">FilterMethod</param>
</interceptor-ref>
分享到:
相关推荐
拦截器(Interceptor)是一种设计模式,用于在程序运行过程中“拦截”某些事件或行为,并在其前后添加额外的操作。在Struts2框架中,拦截器主要用于对Action执行前后的过程进行干预,以便执行一些通用的功能,如验证...
在某些情况下,我们需要在拦截器中处理国际化问题,例如根据用户的选择或浏览器的默认语言动态切换资源包。这时,我们可以编写一个自定义拦截器来实现这一功能: 1. 自定义拦截器中,检查请求头或Cookie以获取用户...
3. **动态代理的应用**:在Struts拦截器中,我们可以创建一个实现了InvocationHandler的类,然后在`invoke()`方法中实现拦截逻辑。通过Proxy.newProxyInstance()方法,我们可以为Action创建一个代理对象,这样每次...
在Struts2中,拦截器(Interceptor)是核心功能之一,它扮演着处理请求、增强功能和实现业务逻辑的重要角色。拦截器允许我们在动作执行前后插入自定义的代码,使得应用的维护和扩展变得更加灵活。 首先,让我们深入...
权限拦截是Web应用安全机制的重要一环,它确保只有具备特定权限的用户才能访问某些资源或执行特定操作。在Struts2中,通过自定义拦截器,我们可以轻松地实现这一功能。 首先,我们需要理解Struts2拦截器的工作原理...
### Struts2拦截器的使用 #### 一、概述 Struts2框架是基于MVC设计模式的一个开源框架,它提供了强大的功能来帮助开发者构建Web应用程序。在Struts2中,拦截器是一种非常重要的机制,它可以在Action执行前后进行...
### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...
3. **排除某些路径不被拦截**:可以通过`<constant>`元素设置排除模式。 ```xml <constant name="struts.action.excludePattern" value="/uploads/.*"> ``` 上述代码表示所有的以`/uploads/`开头的URL都不会被...
Struts拦截器(Interceptors)是Struts2框架的核心组件之一,它们在处理请求时扮演着重要的角色。拦截器的工作原理类似于AOP(面向切面编程),允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、...
在Struts2框架中,拦截器(Interceptor)是实现业务逻辑和控制流程分离的重要工具,它允许开发者在执行Action之前或之后执行某些操作,比如验证用户登录状态。在这个案例中,我们讨论的是如何使用拦截器来检查用户的...
### Struts2拦截器实现用户登录权限的验证 在Web应用开发中,用户登录权限验证是确保系统安全的重要环节之一。Struts2框架提供了一种灵活的方式来实现这一功能:通过自定义拦截器来控制用户的访问权限。下面我们将...
虽然拦截器和过滤器在某些方面有相似之处,但它们在使用场景和处理时机上有所不同。拦截器更专注于业务逻辑的增强,而过滤器通常用于HTTP请求的预处理和后处理,如字符编码转换、安全过滤等。 **8. 实战:Struts2_...
例如,可以创建一个登录拦截器,确保只有已登录的用户才能访问某些页面。 6. **性能优化**:虽然Struts1本身不支持拦截器,但通过"saif(struts1 interceptor)"插件,开发者可以实现缓存管理、性能统计等优化措施,...
### Struts2拦截器权限设置 #### 背景与目的 在开发Web应用程序时,权限控制是一项重要的功能。它确保只有经过验证的用户才能访问特定的资源或执行某些操作。Struts2作为一款流行的Java Web框架,提供了丰富的功能...
在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...
### Struts 2 过滤器与拦截器的深入解析 #### 一、概述 在Struts 2框架中,过滤器(Filter)和拦截器...而对于需要在整个应用层面统一处理某些功能(如日志记录、权限验证等),过滤器可能是一个更好的选择。
Struts2框架提供了拦截器机制,可以在Action执行前后执行某些操作,以满足特定的需求。TrimInterceptor就是一个这样的拦截器,它的主要功能是过滤请求数据的首尾空格。 TrimInterceptor实现 TrimInterceptor继承...
1. **Struts拦截器**: - 拦截器是Struts2的核心组件之一,它们是基于Java的动态代理机制实现的。在Action调用前后,拦截器可以执行一系列预定义的任务,如日志记录、权限验证、数据校验等。 - 拦截器链是由多个...
在实际应用中,开发者可以根据具体情况选择使用 Interceptor 或者 Filter 来实现某些功能。例如,在登录验证中,可以使用 Interceptor 来检查用户的登录状态,而在记录用户请求日志中,可以使用 Filter 来记录所有...
`init()`方法在拦截器被加载到容器时调用,通常用于进行初始化操作,而`destroy()`方法则在拦截器从容器中移除时调用,可以用来释放资源。 在实际应用中,可能需要排除某些Action不经过此拦截器,例如注册页面的...