`
conkeyn
  • 浏览: 1523025 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

动作日志记录拦截器示例

 
阅读更多

动作日志记录拦截器示例

 

1.  基础知识

基础知识可以从以下链接地址查阅。

1、注解(Annotation)基本概念

2、注解(Annotation)自定义注解入门

3、注解(Annotation--注解处理器

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 mvcRequestContextHolder的数据将由org.springframework.web.servlet.DispatcherServlet拼装,在没有使用标准spring mvc时需要-->

        <!-- org.springframework.web.filter.RequestContextFilterorg.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

 

分享到:
评论

相关推荐

    简单介绍Struts2中的拦截器的小示例

    拦截器的工作原理是在Action调用之前和之后执行,通过拦截请求,可以实现如日志记录、权限检查、事务管理等通用功能,避免在每个Action类中重复编写这些代码。在Struts2中,拦截器是基于Java的动态代理机制实现的。 ...

    模拟一个拦截器

    在Struts2框架中,拦截器是基于AOP(面向切面编程)概念实现的,它们可以监控、修改或增强特定方法的调用流程,例如,登录验证、日志记录、性能统计等。 1. **拦截器的生命周期** - **初始化**:在应用启动时,...

    struts2拦截器应用小例子

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...

    strut2的拦截器的例子

    拦截器是Struts2的核心特性之一,它允许开发者在动作执行前后插入自定义的逻辑,以此来实现如日志记录、权限检查、数据验证等通用功能。本教程将通过实例深入解析Struts2拦截器的工作原理及其应用。 首先,了解拦截...

    J2EE拦截器实例

    它们可以用来进行权限检查、日志记录、性能监控、事务管理等通用任务,从而提高代码的可重用性和模块化。 在Struts2框架中,拦截器是基于Java的动态代理机制实现的。开发者需要创建一个实现了`...

    struts2实现拦截器、

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、性能监控等。本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现...

    利用struts2拦截器做的简单登录

    拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作原理。拦截器是一个实现了`Interceptor`接口的类,它们按照...

    Struts1 拦截器(SAIF)的使用

    拦截器在Struts1中扮演着重要角色,它允许开发者在动作执行前后插入自定义的逻辑,比如日志记录、权限验证、事务管理等。SAIF插件是Struts1中一个特定的拦截器实现,用于增强框架的功能。 **1. Struts1 拦截器原理*...

    Spring Controller拦截器配置

    下面的示例展示了如何在Spring MVC中配置一个名为`JurisdictionInterceptor`的拦截器。 ```xml &lt;!-- 拦截器 --&gt; &lt;!-- 可配置多个拦截bean --&gt; *" /&gt; &lt;!-- 属性注入 --&gt; &lt;value&gt;/login ``` -...

    Struts2的拦截器的使用详解

    通过定义一系列拦截器并设置它们的执行顺序,你可以实现如日志记录、权限验证、性能监控等通用功能,而无需在每个Action中重复编写这些代码。 二、拦截器的结构与工作原理 1. 拦截器栈:Struts2中的拦截器不是单独...

    在struts1中使用拦截器——saif-0.1.jar

    4. **映射拦截器**:使用`&lt;action&gt;`标签的`interceptor-ref`属性将拦截器映射到特定的动作上。可以创建一个或多个拦截器链,通过`chain-name`属性引用。 5. **定制拦截器链**:通过`&lt;interceptor-chain&gt;`标签定义...

    struts2--4.拦截器

    拦截器就像过滤器一样,按照预定义的顺序对请求进行处理,可以执行验证、日志记录、事务管理等多种任务。它们通过实现`Interceptor`接口或继承`AbstractInterceptor`类来创建。 ### 2. 拦截器链 在Struts2中,多个...

    webwork拦截器,验证,以及帮助文档

    在WebWork中,拦截器是处理请求的关键组件,它们在动作执行前后执行特定的任务,如日志记录、权限检查、数据转换等。拦截器通过在ActionInvocation链中插入逻辑,使得开发者可以灵活地扩展应用程序的行为,而无需...

    struts2拦截器实例

    例如,数据验证、日志记录、性能监控等都可以通过拦截器来实现。 **二、拦截器的层次结构** Struts2中的拦截器是基于AOP(面向切面编程)思想设计的,它们位于Action调用之前和之后,形成一个拦截器链。每个拦截器...

    Struts2 拦截器注解(二十七)

    拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...

    struts2中的拦截器

    拦截器在Struts2框架中扮演着至关重要的角色,它们是实现业务逻辑控制、数据验证、日志记录等功能的核心组件。下面我们将深入探讨Struts2中的拦截器及其用法。 **1. 拦截器的概念** 拦截器是一种设计模式,它在动作...

    struts2的一个自定义拦截器小例子

    拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限检查、事务管理等。在Struts2中,拦截器通过ActionInvocation接口协调动作的执行流程。 创建自定义拦截器...

    拦截器和struts2拦截器的使用

    它主要用于处理请求或响应过程中的一些通用任务,比如权限验证、日志记录、事务管理等。在Java Web开发中,Struts2框架提供了内置的拦截器机制来简化这些操作。 #### 自定义拦截器 在Struts2框架中,自定义拦截器...

    Struts拦截器

    以下是一个简单的自定义拦截器示例: ```java public class MyInterceptor implements Interceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { System.out....

    struts2类型转换 拦截器 校验的例子

    拦截器是Struts2的核心组件之一,它允许在动作执行前后插入自定义逻辑,比如日志记录、事务管理、性能监控等。Struts2提供了一系列内置的拦截器,如`Params`用于参数解析,`Prepare`用于动作准备,`Validation`用于...

Global site tag (gtag.js) - Google Analytics