2016-09-23 22 views
0
@Controller 
@RequestMapping(value = {"user"}) 
public class UserController { 

...類級別的請求映射@RequestMapping在每次請求執行一些代碼,該類

@RequestMapping(value = {"dashboard"}) 
public String index(HttpServletRequest req, ModelMap map) { 
     this.objSession = req.getSession(false); 
     try { 
      System.out.println(this.objSession.getAttribute("userid")); 

我使用Spring 4.2。 假設我有這個類,我想檢查具有屬性userid = 1的會話對象。 我正在檢查這個「/ user」請求下的每個方法。 我的查詢是,如果我可以避免執行任何方法的任何代碼之前,我正在做的相同的編碼。

有沒有什麼辦法可以提高代碼的可檢測性?

提前感謝您的時間。

+0

使用過濾器[像這樣(http://stackoverflow.com/a/36834942/4117061)編寫,而爲每個請求的檢查。 。 –

+0

謝謝@PrasannaKumar – subhajit

+0

是否有效?如果是的話,我會將此標記爲重複..只是你可以upvote那裏..沒有必要回答並接受在這裏 –

回答

0

您可以通過匹配請求路徑來使用interceptors

<mvc:interceptors path-matcher="/someRequest/*"> 
    <bean class="className" autowire="constructor"/> 
</mvc:interceptors> 

path-mathcer您可以指定一個URL類型,因此它會執行任何你需要。

控制器:

@Controller 
@RequestMapping(value = {"someRequest/user"}) 
public class UserController { 

攔截:處理someRequest/user之前,你可以使用一個攔截器像下面,有3種方式,你可以使用 - >afterCompletion ,preHandle,postHandle

在你的情況下的代碼將在preHandle方法

public class SomeRequestIntercept implements HandlerInterceptor { 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, 
      Exception exception) throws Exception { 

    } 

    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) 
      throws Exception { 

    } 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { 
     System.out.println("before processing someRequest/**"); 
     return true; 
    } 

} 
+0

你可以告訴我如何在類級別映射請求時執行方法嗎? 假設一個請求是這樣的: /user/something, /user/anotherthing,現在我想要一個方法在它映射到「/ something」和「/ anotherthing」之前被執行兩次。 感謝您的回覆。 – subhajit

+0

@subhajit這是幫助嗎? –