`
xp9802
  • 浏览: 1182784 次
  • 性别: 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...

    spring mvc 注解实例

    spring mvc 注解 拦截器 对一个数据库表进行了增删改查操作 ,初学spring mvc框架的 可以参考 代码下载直接可以运行!~~

    Spring MVC注解项目实例

    spring mvc 注解 拦截器 对一个数据库表进行了增删改查操作 ,初学spring mvc框架的 可以参考 代码下载直接可以运行!~~ 包含jar和数据库sql语句

    SpringMVCDemo:Spring MVC 框架知识案例

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

    Spring+Spring mvc+Hibernate+Bootstrap、企业级员工信息管理系统

    后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04. 系统前台采用全采用的Html+jQuery开发 05. 系统前台与后台的交互全部使用 Ajax 异步请求 06. 自定义 SecureValid 注解实现权限的控制 07. ...

    Spring MVC 3 结合DWZ 框架编写拦截器判断session是否过期

    基于注解的Spring MVC 3 结合DWZ 框架,编写的拦截器判断session是否过期,有需要的可以下载。

    springmvc用于方法鉴权的注解拦截器的解决方案代码

    主要介绍了springmvc用于方法鉴权的注解拦截器的解决方案代码,具有一定借鉴价值,需要的朋友可以参考下。

    Spring MVC配置文档及原理介绍

    基于spring2.5的采用XML配置的spring MVC项目 基于spring2.5注解实现的spring MVC项目 基于spring 3.0项目开发实例 基于spring 3.0mvc 框架的文件上传实现 Spring中的拦截器

    基于jwt的权限控制框架,支持与Spring Boot配合使用,支持Spring MVC与WebFlux

    ,Spring Web编程模型,基于权限配置的方式:核心是1个拦截器,基于注解的权限控制:核心是1个切面,WebFlux编程模型,基于权限配置的方式:核心是1个过滤器,基于注解的权限控制:核心是1个切面

    webspring-mvc

    上次写的那个引用乱了。 spring mvc+ibatis,webspring-mvc源码实例,实现了注解,拦截器,ibatis等实例

    SpringMVC教程

    也包含新版Spring3.0,3.1 基于注解的MVC配置方法 总之绝对值得下载 学习 并以后查阅 目录 第一章 Web MVC简介.pdf 第二章 Spring MVC入门 .pdf 第三章 DispatcherServlet详解.pdf 第四章 Controller接口控制器详解...

    基于SSM框架(SpringMVC + Spring + Mybatis)的图书管理系统,内附,教程,数据库脚本

    1 此系统采用了目前最流行的ssm框架,其中的spingMVC框架相对于struts2框架更灵活,更安全。 2 本项目springMVC框架采用了注解映射器,使用了...5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。

    spring mvc + spring3.2.3 + mybatis3.2.3 + oracle

    本人搭建的最新ssm框架,包括c3p0连接池、全注解、AOP日志管理、mybatis拦截器物理分页、文件上传等功能。依旧保持最小jar包,只有20个,本人讨厌滥用jar包。

    webspring-mvc.rar

    webspring-mvc源码实例,实现了注解,拦截器等实例

    基于SSM框架(SpringMVC + Spring + Mybatis)的图书管理系统数据库.rar

    此系统采用了目前最流行的ssm框架,其中的spingMVC框架相对于struts2框架更灵活,更安全。 2 本项目springMVC框架采用了注解映射器,使用了... 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。

    详解利用SpringMVC拦截器控制Controller返回值

    主要介绍了详解利用SpringMVC拦截器控制Controller返回值,通过定义一个StringResult注解,在访问方法的时候返回StringResult中的内容,有兴趣的可以了解一下。

    跟我学SpringMVC 教程

    第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的请求映射规则详解 第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者...

    编程语言+JAVAspring+MVC框架+Web开发

    编程语言+JAVAspring+MVC框架+...它介绍了JAVAspring的MVC框架的概念、原理和作用,以及如何使用JAVAspring的MVC框架来开发Web应用,包括控制器、模型、视图、拦截器、异常处理等内容,以及一些配置文件和注解的用法。

    跟我学SpringMVC

    第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的请求映射规则详解 第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者...

Global site tag (gtag.js) - Google Analytics