MethodInterceptor方法拦截器

1.自定义一个annotation

[java] view plaincopyprint?

  1. package com.websystem.util;
  2. import java.lang.annotation.Documented;
  3. import java.lang.annotation.ElementType;
  4. import java.lang.annotation.Retention;
  5. import java.lang.annotation.RetentionPolicy;
  6. import java.lang.annotation.Target;
  7. /**
  8. * des:自定义使方法跳过拦截的注解
  9. * author: zbl
  10. * date: 2014年9月3日
  11. **/
  12. @Target(ElementType.METHOD)
  13. @Retention(RetentionPolicy.RUNTIME)
  14. @Documented
  15. public abstract @interface RequiredInterceptor{
  16. boolean required() default true;
  17. }

2.在Controller里面的方法使用自定义的annotation,下面是一个登进登出的例子。

[java] view plaincopyprint?

  1. package com.websystem.controller;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import javax.annotation.Resource;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.ModelMap;
  8. import org.springframework.web.bind.annotation.ModelAttribute;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RequestMethod;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. import org.springframework.web.bind.annotation.SessionAttributes;
  13. import org.springframework.web.bind.support.SessionStatus;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import org.springframework.web.servlet.view.RedirectView;
  16. import com.websystem.model.ManagerModel;
  17. import com.websystem.service.ManagerService;
  18. import com.websystem.util.AESPlusHelper;
  19. import com.websystem.util.Constant;
  20. import com.websystem.util.RequiredInterceptor;
  21. /**
  22. * des:
  23. * author: zbl
  24. * date: 2014年8月26日
  25. **/
  26. @Controller
  27. @SessionAttributes(Constant.Manager)
  28. public class ManagerController {
  29. @Resource
  30. private ManagerService managerServiceImpl;
  31. @RequiredInterceptor(required = false)
  32. @RequestMapping(value = "manager/login.do",method = RequestMethod.GET)
  33. public ModelAndView login(ManagerModel managerModel,ModelMap model){
  34. ManagerModel manager = managerServiceImpl.getManager(managerModel);
  35. if(manager!=null){
  36. manager.setPassword("");
  37. model.addAttribute(Constant.Manager, manager);
  38. return new ModelAndView(new RedirectView(Constant.MainURL));
  39. }else{
  40. return new ModelAndView(new RedirectView(Constant.LoginURL));
  41. }
  42. }
  43. @RequiredInterceptor(required = false)
  44. @RequestMapping(value = "manager/logout.do",method = RequestMethod.GET)
  45. @ResponseBody
  46. public Object logout(SessionStatus status){
  47. status.setComplete();
  48. Map<String,Object> map = new HashMap<String,Object>();
  49. map.put(Constant.Success, true);
  50. return map;
  51. }
  52. }

3.定义MethodInterceptor,里面可以处理AOP逻辑代码。

[java] view
plain
copyprint?

  1. package com.websystem.util;
  2. import org.aopalliance.intercept.MethodInterceptor;
  3. import org.aopalliance.intercept.MethodInvocation;
  4. import org.springframework.core.annotation.AnnotationUtils;
  5. import org.springframework.stereotype.Component;
  6. /**
  7. * des:
  8. * author: zbl
  9. * date: 2014年9月3日
  10. **/
  11. @Component
  12. public class SessionInterceptor implements MethodInterceptor {
  13. @Override
  14. public Object invoke(MethodInvocation invocation) throws Throwable {
  15. // TODO Auto-generated method stub
  16. RequiredInterceptor requiredInterceptor = AnnotationUtils.findAnnotation(invocation.getMethod(), RequiredInterceptor.class);
  17. if(requiredInterceptor!=null){
  18. System.out.println(invocation.getMethod().getName());
  19. //你要做的逻辑代码
  20. }
  21. return invocation.proceed();
  22. }
  23. }

4.添加配置

[html] view plaincopyprint?

  1. <context:component-scan base-package="com.websystem.controller,com.websystem.*.impl,com.websystem.util"/>
  2. <mvc:annotation-driven/>
  3. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  4. <property name="beanNames">
  5. <list><value>*Controller</value></list>
  6. </property>
  7. <property name="interceptorNames">
  8. <list><value>sessionInterceptor</value></list>
  9. </property>
  10. </bean>

这里用的是所有Controller过滤一遍,也可以定位为service 和dao  。 也可以用这个MethodInterceptor做缓存。

时间: 2024-09-30 20:55:18

MethodInterceptor方法拦截器的相关文章

使用方法拦截器MethodInterceptor和AOP统一处理log

对每个接口的请求记录log的方法有很多种,比如用filter.mvc interceptor.method interceptor等.如果需要记录请求消息的payload,前两种不适用.下面介绍第三种的实现方法. 第一步:引入包依赖 <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name=&

Struts2拦截器、拦截器栈(Interceptor Stack)、全局拦截器与方法拦截器

Struts2拦截器原理 Struts2拦截器是在访问某个Action或Action的方法之前或之后实施拦截.在请求Struts2的Action时,Struts2会查找配置文件,并根据配置文件实例化相应的拦截器对象. Struts2拦截器配置 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Found

spring MethodInterceptor方法拦截

引用别的的:https://blog.csdn.net/u010739551/article/details/47754731 最近项目里加上了用户权限,有些操作需要登录,有些操作不需要,之前做项目做权限,喜欢使用过滤器,但在此使用过滤器比较死板,如果用的话,就必须在配置文件里加上所有方法,而且 不好使用通配符.所以想了想,之前在人人用过的一种比较简单灵活的权限判断,是采用Spring 的 methhodInterceptor拦截器完成的,并且是基于注解的 @LoginRequired    @

Struts2 自定义拦截器(方法拦截器)

一.实现Interceptor接口 1 public interface Interceptor extends Serializable{ 2 public void init(); 3 public void destroy(); 4 public String intercept(ActionInvocation invocation)(); 5 } 并实现上述方法. 二.继承AbstractInterceptor类,重写intercept()方法即可 此方法更可行,其实AbstractI

struts2 参数注入 方法拦截器

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee"

好记性不如烂笔头50-javaWeb框架struts2中的方法拦截器(5)

1. Struts2的方法拦截器概述 Struts2拦截器也可以通过MethodFilterInterceptor类实现,MethodFilterInterceptor重写了AbstractInterceptor类的intercept(ActionInvocationinvocation)方法,但提供了一个doIntercept(ActionInvocation invocation)抽象方法.从这种设计方式可以看出,MethodFilterInterceptor类的intercept已经实现了

.NET 简易方法拦截器

伟大的无产阶级Willaim曾说过:"无论你觉得自己多么的了不起,也永远有人比你更强".对,我说过!我就是william. 今天想记录一下在项目中遇到的一个比较有意思的东西,异常拦截器(也不能完全说只是异常拦截,准确的说应该叫方法拦截),那有的人可能会说,异常拦截器不就是用Try--Catch就好了吗?没错,Try--Catch是能拦截到异常.如果只是简单拦截下,这种方法简单可行.但是我们如果扩展下,所有的异常都要统一处理,如果你是架构师,你的团队需要你提供一个公共的异常拦截处理组件,

Autofac 设置方法拦截器的两种方式

前提 1.Nuget安装Autofac 4.0以下版本  4.0及4.0 以上版本暂时没找到合适的方案 2.Nuget安装Autofac.Extras.DynamicProxy2 3.创建一个类似下面代码得 拦截类 public class TestInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { string c = string.Format("Calling method {0} wit

Struts2 拦截器过滤方法

1.struts.xml属性 excludeMethods参数指定拦截器拒绝拦截的方法列表,多个用英文逗号隔开 includeMethods参数指定拦截器需要拦截的方法列表,多个用英文逗号隔开 2.方法拦截器代码 MethodFilterInterceptor抽象类重写了AbstractInterceptor类中的Intercept()方法,还提供了doIntercept(ActionInvocation paramActionInvocation)方法 3.效果 输入地址 http://loc