1. 基础知识
基础知识可以从以下链接地址查阅。
2. 项目中的动作日志记录拦截器编码步骤
2.1. 创建Action类
示例中使用的spring mvc是框架,与使用struts2框架大同小异。
@Controller
@RequestMapping(value="/blog")
publicclass BlogController {
@Resource
private BlogService blogService;
@RequestMapping(value="/insertblog",method=RequestMethod.GET)
@Action("插入微博") //定义动作日志
public ModelAndView insertBlog(HttpServletRequest request,
HttpServletResponse response, @RequestParam String name){
Blog blog = new Blog();
blog.setName(name);
blogService.insertBlog(blog);
returnnew ModelAndView("blog/insertblog");
}
}
2.2. 创建注解类
package org.spring.example.log;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD,ElementType.TYPE})//应用于类型和方法
@Documented//标记是否可以被文档化java doc
@Retention(RetentionPolicy.RUNTIME)//指明保留周期(生命周期)要运行时期。
@Inherited// 要使被注解的父类也可以应用到子类中
public@interfaceAction {
public String value() default"";//必须指明不为空的默认值,
}
2.3. 创建拦截器
import java.lang.reflect.Method;
import javax.servlet.http.HttpSession;
import org.aspectj.lang.ProceedingJoinPoint;
import org.spring.example.log.Action;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
publicclass ActionLogInterceptor {
// 此方法的方法名自定义,参数类型为org.aspectj.lang.ProceedingJoinPoint,返回类型为Object
public Object doActionLog(ProceedingJoinPoint point) throws Throwable {
String actionDesc = null;
String methodName = point.getSignature().getName();// 读取切点的方法名称
Class clazz = point.getTarget().getClass();
for (Method method : clazz.getDeclaredMethods()) {
if (method.getName().equals(methodName)) {
//判断是有Action注解标识
if(method.isAnnotationPresent(Action.class)){
//读取action注解标识的值
Action action = method.getAnnotation(Action.class);
actionDesc = action.value();
}
}
}
// RequestContextHolder类的静态方法取得当前用户
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpSession session = attr.getRequest().getSession();
// 输出当前用户的会话ID
System.out.println("session id: " + session.getId() + ", actionDesc: "
+ actionDesc);
return point.proceed();
}
}
2.4. 配置web.xml
配置web.xml,主要是为了获取当前是请求,并从当前请求中取得session对象。
<filter>
<!-- 在标准的spring mvc中RequestContextHolder的数据将由org.springframework.web.servlet.DispatcherServlet拼装,在没有使用标准spring mvc时需要-->
<!-- org.springframework.web.filter.RequestContextFilter与org.springframework.web.context.request.RequestContextHolder搭配使用 -->
<filter-name>RequestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestContextFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
2.5. 配置拦截器
<bean id="actionLogInterceptor" class="org.spring.example.interceptor.ActionLogInterceptor" />
<aop:config proxy-target-class="true">
<!-- 使用“执行”表达式定义规则 -->
<!--aop:pointcut expression="execution(* org.spring.example.web..*(..))" id="actionLogPointCut" / -->
<!-- 使用@annotation表达式写义规则 -->
<aop:pointcut expression="@annotation(org.spring.example.log.Action)" id="actionLogPointCut" />
<aop:aspect ref="actionLogInterceptor">
<aop:around method="doActionLog" pointcut-ref="actionLogPointCut" />
</aop:aspect>
</aop:config>
3. 测试
http://localhost:8080/springmvc/blog/insertblog.do?name=j
相关推荐
拦截器的工作原理是在Action调用之前和之后执行,通过拦截请求,可以实现如日志记录、权限检查、事务管理等通用功能,避免在每个Action类中重复编写这些代码。在Struts2中,拦截器是基于Java的动态代理机制实现的。 ...
在Struts2框架中,拦截器是基于AOP(面向切面编程)概念实现的,它们可以监控、修改或增强特定方法的调用流程,例如,登录验证、日志记录、性能统计等。 1. **拦截器的生命周期** - **初始化**:在应用启动时,...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...
拦截器是Struts2的核心特性之一,它允许开发者在动作执行前后插入自定义的逻辑,以此来实现如日志记录、权限检查、数据验证等通用功能。本教程将通过实例深入解析Struts2拦截器的工作原理及其应用。 首先,了解拦截...
它们可以用来进行权限检查、日志记录、性能监控、事务管理等通用任务,从而提高代码的可重用性和模块化。 在Struts2框架中,拦截器是基于Java的动态代理机制实现的。开发者需要创建一个实现了`...
在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、性能监控等。本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现...
拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作原理。拦截器是一个实现了`Interceptor`接口的类,它们按照...
拦截器在Struts1中扮演着重要角色,它允许开发者在动作执行前后插入自定义的逻辑,比如日志记录、权限验证、事务管理等。SAIF插件是Struts1中一个特定的拦截器实现,用于增强框架的功能。 **1. Struts1 拦截器原理*...
下面的示例展示了如何在Spring MVC中配置一个名为`JurisdictionInterceptor`的拦截器。 ```xml <!-- 拦截器 --> <!-- 可配置多个拦截bean --> *" /> <!-- 属性注入 --> <value>/login ``` -...
通过定义一系列拦截器并设置它们的执行顺序,你可以实现如日志记录、权限验证、性能监控等通用功能,而无需在每个Action中重复编写这些代码。 二、拦截器的结构与工作原理 1. 拦截器栈:Struts2中的拦截器不是单独...
4. **映射拦截器**:使用`<action>`标签的`interceptor-ref`属性将拦截器映射到特定的动作上。可以创建一个或多个拦截器链,通过`chain-name`属性引用。 5. **定制拦截器链**:通过`<interceptor-chain>`标签定义...
拦截器就像过滤器一样,按照预定义的顺序对请求进行处理,可以执行验证、日志记录、事务管理等多种任务。它们通过实现`Interceptor`接口或继承`AbstractInterceptor`类来创建。 ### 2. 拦截器链 在Struts2中,多个...
在WebWork中,拦截器是处理请求的关键组件,它们在动作执行前后执行特定的任务,如日志记录、权限检查、数据转换等。拦截器通过在ActionInvocation链中插入逻辑,使得开发者可以灵活地扩展应用程序的行为,而无需...
例如,数据验证、日志记录、性能监控等都可以通过拦截器来实现。 **二、拦截器的层次结构** Struts2中的拦截器是基于AOP(面向切面编程)思想设计的,它们位于Action调用之前和之后,形成一个拦截器链。每个拦截器...
拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...
拦截器在Struts2框架中扮演着至关重要的角色,它们是实现业务逻辑控制、数据验证、日志记录等功能的核心组件。下面我们将深入探讨Struts2中的拦截器及其用法。 **1. 拦截器的概念** 拦截器是一种设计模式,它在动作...
拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限检查、事务管理等。在Struts2中,拦截器通过ActionInvocation接口协调动作的执行流程。 创建自定义拦截器...
它主要用于处理请求或响应过程中的一些通用任务,比如权限验证、日志记录、事务管理等。在Java Web开发中,Struts2框架提供了内置的拦截器机制来简化这些操作。 #### 自定义拦截器 在Struts2框架中,自定义拦截器...
以下是一个简单的自定义拦截器示例: ```java public class MyInterceptor implements Interceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { System.out....
拦截器是Struts2的核心组件之一,它允许在动作执行前后插入自定义逻辑,比如日志记录、事务管理、性能监控等。Struts2提供了一系列内置的拦截器,如`Params`用于参数解析,`Prepare`用于动作准备,`Validation`用于...