如何使用拦截器获取Controller方法名和注解信息?

共 1980字,需浏览 4分钟

 ·

2021-10-24 17:31

上一篇:RabbitMQ和Kafka到底怎么选?

作者:howroad
来源:https://blog.csdn.net/howroad/article/details/80220320

在使用SpringMVC进行项目的时候用到了权限验证。


表分为:



用户-角色-资源都是多对多的关系,验证无非就是收到请求后,在拦截器循环判断用户是否有权限执行操作。


方法一:通过request获得用户的URI,再逐一循环判断是否可以操作。只是这种方法很让人难受。


方法二:通过用户要访问的方法来判断是否有权限:

preHandle方法中handler实际为HandlerMethod,(看网上说的有时候不是HandlerMethod),加个instanceof验证吧

可以得到方法名:h.getMethod().getName()

可以得到RequestMapping注解中的值:h.getMethodAnnotation(RequestMapping.class)

这种方法还是不太方便

方法三:自定义注解


自定义注解代码:

@Retention(RUNTIME)@Target(METHOD)public @interface MyOperation {    String value() default "";//默认为空,因为名字是value,实际操作中可以不写"value="}


Controller代码:

@Controller("testController")public class TestController {    @MyOperation("用户修改")//主要看这里    @RequestMapping("test")    @ResponseBody    public String test(String id) {        return "Hello,2018!"+id;    }}

拦截器的代码:

@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)        throws Exception {    System.out.println("进入拦截器");    if(handler instanceof HandlerMethod) {        HandlerMethod h = (HandlerMethod)handler;        System.out.println("用户想执行的操作是:"+h.getMethodAnnotation(MyOperation.class).value());        //判断后执行操作...    }    return HandlerInterceptor.super.preHandle(request, response, handler);}

在每个方法上面加注解太麻烦啦,可以在类上加注解

@Retention(RUNTIME)@Target(TYPE)public @interface MyOperation {    String value() default "";}
//拦截器中这样获得h.getMethod().getDeclaringClass().getAnnotation(MyOperation.class);

我可以获取requestMapping,不用创建自定义注解啊,值得注意的是,不要使用GetMapping等,要使用requestMapping


感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。

    · END ·
最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全


正文结束


推荐阅读 ↓↓↓

1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.程序员一般可以从什么平台接私活?

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看

7.这封“领导痛批95后下属”的邮件,句句扎心!

8.15张图看懂瞎忙和高效的区别!


浏览 43
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报