`
xp9802
  • 浏览: 1204531 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring MVC 方法注解拦截器(转)

 
阅读更多

应用场景,在方法级别对本次调用进行鉴权,如api接口中有个用户唯一标示accessToken,对于有accessToken的每次请求可以在方法加一个拦截器,获得本次请求的用户,存放到request或者session域。

python中,之前在python flask中可以使用装饰器来对方法进行预处理,进行权限处理

先看一个实例,使用@access_required拦截:

1
2
3
4
5
6
7
8
@api.route('/post_apply')
@access_required
def apply():
    """
     活动报名
    """
    print '报名者是:'+g.user
    return jsonify(response_data)

实现很简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 验证access_token并保存当前用户到g中
def access_required(f):
    @wraps(f)
    def decorated_func(*args, **kwargs):
        access_token = request.values.get('access_token')
        if access_token == None:
            return error_msg('500''access_token required')
        if access_token == "":
            return error_msg('500''access_token can not empty')
        if is_access_token(access_token) == False:
            return error_msg('500''invalid_access_token')
        return f(*args, **kwargs)
    return decorated_func

 

java中,自定义注解拦截器来实现,在需要的拦截的方法上面加上一个注解@AccessRequired

spring mvc Controller中的使用实例

1
2
3
4
5
6
7
8
9
/**
     * 注解拦截器方法
     * @return
     */
    @RequestMapping(value="/urlinter",method=RequestMethod.GET)
    @AccessRequired
    public @ResponseBody String urlInterceptorTest() {
        return "通过拦截器:user"+request.getAttribute("currUser");
    }

如何实现以上实例呢?

定义一个注解:

1
2
3
4
5
6
7
8
9
10
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
 
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessRequired {
     
}

搞一个拦截器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * 拦截url中的access_token
 * @author Nob
 
 */
public class UserAccessApiInterceptor extends HandlerInterceptorAdapter {
 
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
 
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        AccessRequired annotation = method.getAnnotation(AccessRequired.class);
        if (annotation != null) {
           System.out.println("你遇到了:@AccessRequired");
           String accessToken = request.getParameter("access_token");
            /**
             * Do something
             */
            response.getWriter().write("没有通过拦截,accessToken的值为:" + accessToken);
        }
        // 没有注解通过拦截
        return true;
    }
}

在spring mvc配置文件中:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 对所有的请求拦截使用/** ,对某个模块下的请求拦截使用:/myPath/* -->
            <mvc:mapping path="/**" />
            <ref bean="userAccessInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
 
    <bean id="userAccessInterceptor"
        class="com.banmacoffee.web.interceptor.UserAccessApiInterceptor">
    </bean>

大功告成,你可以在拦截器里为所欲为,并且把它加载任何你想的Controller 请求的方法上。

 

 

http://www.open-open.com/lib/view/open1408004883004.html

分享到:
评论
1 楼 it_node 2018-03-12  
谢谢拦截器知识分享,推荐一个flask的入门教程给大家:

深入浅出 flask http://xc.hubwiz.com/course/562427361bc20c980538e26f

相关推荐

    spring mvc 中 实现自定义注解 拦截需要的方法

    网上很多人想使用注解拦截spring mvc action中的一个方法,实现方法很多,一般是通过在拦截器中分析url路径来实现, 使用自定义注解的方式来标注要拦截的 action 中的某个方法, 没有很好的解决方法, 如果通过借助spring...

    Spring3.0MVC注解(附实例)

    这两个组件是Spring MVC框架的核心部分,它们负责映射请求到适当的控制器方法。 例如,在`zfpt-servlet.xml`配置文件中,你可以看到以下配置: ```xml &lt;bean class="org.springframework.web.servlet.mvc....

    spring MVC AOP注解方式如何拦截controller 例子

    在Spring中,我们可以使用AspectJ注解来声明切面,这些注解包括`@Aspect`、`@Before`、`@After`、`@Around`等,它们分别代表前置通知、后置通知、环绕通知等不同类型的拦截器。 1. **创建切面类** 首先,我们需要...

    Spring MVC注解项目实例

    总结起来,这个"Spring MVC注解项目实例"涵盖了Spring MVC框架的核心元素,包括注解驱动的控制器、拦截器的使用,以及数据库操作。它为初学者提供了一个动手实践的机会,帮助他们快速掌握Spring MVC的开发技巧。

    spring mvc 注解实例

    总的来说,这个"spring mvc 注解实例"项目为你提供了一个学习Spring MVC基本功能的起点,包括注解驱动的控制器、拦截器的使用以及数据库操作。通过运行提供的代码,你可以亲自体验和理解这些概念,从而更好地掌握...

    Spring MVC 拦截器入门例子

    Spring MVC 拦截器是基于Java的Web开发框架Spring MVC中的一个重要组件,它允许开发者在请求被控制器处理之前或之后执行自定义逻辑。拦截器主要用于实现通用功能,如权限验证、日志记录、性能监控等,从而提高代码的...

    Spring MVC 拦截器

    Spring MVC的拦截器与Servlet的Filter有所不同,Filter是对所有请求进行拦截,而拦截器则可以更加精确地控制对哪些Controller或特定的处理方法进行拦截。HandlerInterceptorAdapter是Spring MVC提供的一般拦截器...

    Spring MVC 教程快速入门 深入分析

    八、Spring MVC请求如何映射到具体的Action中的方法:说明了如何配置映射器(HandlerMapping)将用户请求映射到具体的控制器方法。 九、Spring MVC中的拦截器:拦截器是Spring MVC提供的一个可插入的组件,可以用来...

    spring mvc + spring + hibernate 全注解整合开发视频教程 04

    在实际开发中,我们还会用到Spring的其他功能,比如Spring MVC的拦截器(Interceptor)用于全局处理,`@ExceptionHandler`注解处理异常,以及Spring的单元测试支持。同时,我们还会关注性能优化,如缓存机制(如使用...

    Spring MVC实例 MVC注解配置

    在这个实例中,我们将探讨如何利用MVC注解配置来简化Spring MVC应用的设置和管理。MVC模式(Model-View-Controller)是软件设计的一种经典模式,它将业务逻辑、数据和用户界面分离,使得代码更加模块化,易于维护。 ...

    Spring mvc 3 注解精华.docx

    在Spring MVC 3中,注解的使用极大地简化了Web应用程序的开发,使得控制器和处理方法的绑定变得更加直观和简洁。本文将详细讲解Spring MVC 3中的注解精华,以及如何配置DispatcherServlet来支持注解。 首先,Spring...

    Spring mvc 超简完整注解可运行Demo

    4. **配置**:在 Spring MVC 中,通常使用 XML 或 Java配置来定义视图解析器、拦截器、数据源等。然而,这个超简示例可能使用了自动配置(Auto-configuration)和 Spring Boot,通过少量或无需配置即可运行。 5. **...

    spring mvc 拦截器获取请求数据信息.rar

    - `@ModelAttribute`注解:在控制器方法的参数中使用`@ModelAttribute`可以将请求参数绑定到模型对象上,而在拦截器中,可以通过`Model`或`ModelAndView`对象来访问这些模型数据。 - `MultipartHttpServletRequest`...

    Mastering Spring MVC 4(2015.09)源码

    总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了深入学习Spring MVC的机会,你可以通过阅读和分析源码来了解如何配置DispatcherServlet、怎样编写控制器、如何进行数据绑定与验证,以及如何利用拦截器等特性...

    spring的mvc,注解驱动

    以上只是Spring MVC注解驱动开发的一部分知识点,实际应用中还有许多其他注解和配置,如`@RestController`、`@SessionAttributes`、`@Async`等,以及AOP(面向切面编程)、Spring Data JPA等集成技术。学习和熟练...

    Spring MVC使用Demo

    为了实现这些功能,Spring MVC的配置文件(如servlet-context.xml)需要正确配置组件扫描、视图解析器、拦截器等。不过,现代Spring MVC项目往往倾向于使用Java配置或Spring Boot的自动配置,减少了XML的使用。 在...

    spring MVC .docx

    9. **Interceptor**: 拦截器可以用来在请求处理前后执行一些通用操作,如权限检查、日志记录等。 10. **Conversion and Validation**: Spring MVC提供了数据转换和验证功能,如使用`@RequestParam`、`@PathVariable...

    spring mvc

    在 Spring MVC 中使用拦截器需要以下步骤: 1. **定义拦截器类**:实现 `HandlerInterceptor` 接口或继承 `HandlerInterceptorAdapter` 类。 2. **注册拦截器**:在配置文件中注册拦截器,指定需要拦截的 URL 模式。...

    Spring mvc5.0.3 所有jar包

    9. **拦截器(Interceptor)**: Spring MVC允许自定义拦截器,可以在请求处理前或后执行一些通用逻辑,如权限检查、日志记录等。 10. **异常处理**: 可以全局或局部地配置异常处理器,将异常转换为特定的视图或HTTP...

    SpringMVCDemo:Spring MVC 框架知识案例

    1.创建第一个 Spring MVC 程序案例 2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 ...14.Spring MVC 拦截器案例 15.Spring MVC 异常处理案例

Global site tag (gtag.js) - Google Analytics