簡體   English   中英

在攔截器上使用Spring MVC控制器方法上的自定義注釋

[英]Using a custom annotation on a Spring MVC controller method from an interceptor

我有一個自定義注釋,我在我的控制器中注釋了一個方法和@ReqestMapping。

目標是使用HandlerInterceptor中自定義注釋中設置的值來執行任務。

我有攔截器(HandlerInterceptorAdaptor)映射並執行。 如果我在具體的Interceptor中設置斷點,我可以檢查HttpServletRequest,HttpServletResponse和handler objects。 但是,我看不出如何1,獲取請求嘗試訪問的方法2,獲取該方法的注釋和3,當然,獲取注釋設置的值。

有人能指出我這方面的好文件嗎?

謝謝,麻煩您了。

AOP將非常適合您。 您應該能夠編寫一個執行任務的建議,並使用連接點定義捕獲被調用控制器的上下文 - 您擁有的任何自定義注釋以及傳遞的參數。

在Spring 3.1中,我們引入了HandlerMethod抽象來表示將處理請求的特定控制器方法。 HandlerMapping和HandlerAdapter專門用於此。 您可以在M2發布后的博文中更詳細地了解這一點。

https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

Spring 3.1尚未發布GA。 當然,它可以作為里程碑版本,也可以作為夜間快照。 無論哪種方式,這都是你應該考慮的事情,因此值得一提。

請發布代碼示例,以便我們更好地了解您要解決的問題。

鑒於您到目前為止所描述的內容,我認為這不是HandlerInterceptor的用途。 它應該被用於橫切的問題,但很難從你的問題描述中看出什么是橫切。 如果要將邏輯綁定到控制器,那么為什么不直接修改控制器? 聽起來修改與控制器緊密耦合,但沒有更多細節,很難說。 那就是說,這是一個相關的問題和答案: HandlerMethod給出了一個HttpRequest?

使用AOP會讓你在那里的一部分 - 至少你會知道更多關於調用哪個控制器方法。 更多信息: Spring AOP切入點與接口上的注釋匹配

你無法分辨它將在攔截器內實際調用的處理程序上的哪個方法,因為HandlerMapping不知道。 這個邏輯都被埋沒在AnnotationMethodHandlerAdapter ,它沒有真正的擴展點。 如果你需要攔截器中的信息,你需要實現一種方法來確定它將根據你的控制器結構調用哪個方法。

我正在尋找相同的解決方案,我找到了教程https://saarthakvats.wordpress.com/2016/05/29/spring-4-mvc-request-interceptor-and-custom-method-argument-annotation-resolver/ comment-page-1 /#comment-9它們創建處理程序和注釋,以便在處理程序檢查端點方法中的令牌是否正常后傳遞用戶ID。 只需稍加修改,我們就可以將其轉換為注釋,以確定該端點是公共端點還是需要用戶角色。

另一個更接近我們需要的例子: https//www.future-processing.pl/blog/exploring-spring-boot-and-spring-security-custom-token-based-authentication-of-rest-services-用彈簧,安全和捏的-Spring的Java配置和彈簧集成測試/

你看過倒影嗎?

http://java.sun.com/developer/technicalArticles/ALT/Reflection/

例如

    Class classVar = Class.forName("java.lang.String");

  // getDeclaredFields() returns all the constructors
  Constructor cnstArray[] = classVar.getConstructors();

  // getFields() returns the declared fields 
  Field fldArray[] = classVar.getDeclaredFields();

  // getMethods() returns the declared methods of the class.
  Method mtdArray[] = classVar.getMethods();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM