1. 程式人生 > >SpringMVC攔截器中獲得Controller方法名和註解資訊(用於驗證許可權)

SpringMVC攔截器中獲得Controller方法名和註解資訊(用於驗證許可權)

在使用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;
    }
}
攔截器的程式碼:
@Override
public 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);
}

//2018-05-16注:

在每個方法上面加註解太麻煩啦,可以在類上加註解
@Retention(RUNTIME)
@Target(TYPE)
public @interface MyOperation {
    String value() default "";
}
//攔截器中這樣獲得
h.getMethod().getDeclaringClass().getAnnotation(MyOperation.class);

我可以獲取requestMapping,不用建立自定義註解啊,值得注意的是,不要使用GetMapping等,要使用requestMapping

相關推薦

SpringMVC攔截獲得Controller方法註解資訊用於驗證許可權

在使用SpringMVC進行專案的時候用到了許可權驗證。 表分為: 使用者表; 角色表; 資源表。 使用者-角色-資源都是多對多的關係,驗證無非就是收到請求後,在攔截器迴圈判斷使用者是否有許可權執行操作。 方法一:通過request獲得使用者的U

SpringMvcController方法的多種實現方式指定返回到哪個頁面,指定返回到頁面的資料

1)ModelAndView@RequestMapping("/list") public ModelAndView itemsList() throws Exception{ List<Items> list = itmesService.lis

深度學習的Xavier初始化He InitializationMSRA初始化、Tensorflow如何選擇合適的初始化方法?

Xavier初始化: 論文:Understanding the difficulty of training deep feedforward neural networks 論文地址:http://proceedings.mlr.press/v9/glorot10a/glorot10a

linuxfirewalld之direct rulesrich rules轉發,偽裝

1.firewall設定中的direct rules 這個指令可以設定火牆的預設設定是接受還是拒絕 firewall-cmd --direct --get-all-rules ##檢視所有的direct rules 這裡可以舉個例子來證明一下 環境:虛擬機器安

shell的fork、sourceexec總結包括環境變數

摘要:對fork,source和exec三種方式執行shell指令碼的總結。 準備知識 1.我們所執行的任何程式,都是由父程序(parent process)所產生出來的一個子程序(child process),子程序在結束後,將返回到父程序去。此一現像在Linux系統中被稱為 fork。當子程序被產生

SpringMVC攔截:解決專案介面url訪問許可權的問題通過url不能隨意訪問controller

層次關係 攔截器實現HandlerInterceptor介面 package com.bybo.aca.web.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http

基於SpringMVC攔截註解實現controller訪問權限控制

pattern efi figure super 設置 復制代碼 check pin system SpringMVC的攔截器HandlerInterceptorAdapter對應提供了三個preHandle,postHandle,afterCompletion方法。

在struts2配置自定義攔截放行多個方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

在JSP常見問題,防止SpringMVC攔截攔截js等靜態資源文件的解決方案

訪問路徑 靜態資源 性能 啟用 所有 默認 fault AD init 方案一、攔截器中增加針對靜態資源不進行過濾(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/*.js"/> <

【轉】詳述 Spring MVC 框架攔截 Interceptor 的使用方法

1 前言   昨天新接了一個需要,“攔截 XXX,然後 OOO”,好吧,說白了就是要用攔截器乾點事(實現一個具體的功能)。之前,也在網路上搜了很多關於Interceptor的文章,但感覺內容都大同小異,而且知識點零零散散,不太方便閱讀。因此,正好藉此機會,整理一篇關於攔截器

Springboot自定義springmvc攔截;HandlerInterceptorpreHandle,postHandle,afterCompletion解析

要實現自定義HandlerInterceptor 。通過 WebMvcConfigurer 的實現類屬性注入,完成springboot自定義攔截 自定義一個攔截器; package com.baidu.

詳述 Spring MVC 框架攔截 Interceptor 的使用方法

1 前言  昨天新接了一個需要,“攔截 XXX,然後 OOO”,好吧,說白了就是要用攔截器乾點事(實現一個具體的功能)。之前,也在網路上搜了很多關於Interceptor的文章,但感覺內容都大同小異,而且知識點零零散散,不太方便閱讀。因此,正好藉此機會,整理一篇關於攔截器的文

springMVC攔截從Request獲取Json格式並解決request的請求流只能讀取一次的問題

背景     在使用SSM(你問我什麼叫SSM,我一拳錘爆你的狗頭)做開發的時候,經常會使用@RequestBody註解,這個註解是非常的好用。但是如果你想在請求引數傳到後臺的時候做一個引數檢驗,當然可以!使用SpringMVC的攔截器,在攔截器裡把request的

利用threadLocal 把攔截的物件傳遞到controller或service

可以用 request 攜帶資料。 更優雅的方式是用threadlocal。請求進入tomcat 和產生響應前,都處於同一個執行緒中 比如在一個登入攔截器中,在preHandle方法中登入成功後,放行前,想把user物件傳到controller或servic

SpringMVC 攔截攔截靜態資源的三種處理方式方法

SpringMVC提供<mvc:resources>來設定靜態資源,但是增加該設定如果採用萬用字元的方式增加攔截器的話仍然會被攔截器攔截,可採用如下方案進行解決: 方案一、攔截器中增加針對靜態資源不進行過濾(涉及spring-mvc.xml) <mvc:resources locati

攔截讀取request的流後,controller 無法獲取到資料解決方案

一般我們會在InterceptorAdapter攔截器中對請求的token進行驗證 如果是content-type 是 application/x-www-form-urlencoded  則沒有什麼問題 如果我們的介面是用@RequestBody來接受資料,那麼我們在攔截

利用SpringMVC攔截控制Controller返回值

    背景:需求是在Controller中方法沒有實現時,返回模擬結果。主要用於專案初期前臺跟後臺的互動,Web專案就是在前臺發出請求然後後臺響應並返回結果。本示例利用攔截器和註解實現跳過執行方法直接返回定義結構的功能。     通過定義一個StringResult註解,

Java泛型 通過反射獲得方法引數的變數類泛型

通過反射獲得方法引數中的變數類名和泛型 package test; import java.lang.reflect.Method; import java.lang.reflect.Paramet

springMVC攔截過濾器總結

cal .org 文件 bat system als request ping blog 攔截器: 用來對訪問的url進行攔截處理 用處: 權限驗證,亂碼設置等 spring-mvc.xml文件中的配置: <beans xmlns="http://www.sprin

SpringMVC攔截

tools nts exc java .net ping db2 handler ppi 配置springmvc.xml代碼: [java] view plain copy <?xml version="1.0" e