2011-02-16 37 views
1

我爲了認證目的寫了一個Spring請求攔截器,它擴展了HandlerInterceptorAdapter。我已經與這條線在我的servlet上下文設置:如何從彈簧攔截器轉發到特定的註釋處理程序?

<mvc:interceptors> 

     <bean class = "it.jsoftware.jacciseweb.controllers.AuthInterceptor"> 
      <property name="manServ" ref = "acciseService"></property> 
     </bean> 
    </mvc:interceptors> 

和預處理方法是

@Override 
    public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler) throws Exception { 
     HttpSession sess = request.getSession(); 

     String path = request.getPathTranslated(); 

     boolean autenticated = maincont.isAuthenticated(sess); 



     if (!autenticated){ 
      response.sendRedirect("accise?action=login"); 
      return false; 
     } 

     return super.preHandle(request, response, handler); 
    } 

這樣無論如何,它會產生一個重定向循環,因爲它永遠不會到達由於攔截和重定向導致重定向頁面。

有很多方法可以解決這個問題,但我不知道如何實現這些目標:

  1. 檢測請求的網址(但我不知道如何),不檢查認證登錄頁面。此外,我想讓這個解決方案更加靈活。
  2. 直接在控制器上選擇登錄處理程序。我怎麼做?可能嗎?
  3. 我在例子中看到人們使用org.springframework.web.servlet.handler.SimpleUrlHandlerMapping指定攔截器映射,無論如何我使用註釋。有沒有一種方法,使用註釋,爲攔截器指定一個不同的映射,以便它不會觸發上述地址(accise?action = login)?或者,也許鏈接不同的映射方案?

回答

1

是否有沒有使用彈簧安全的特定原因?

恕我直言簡單,功能強大,經過深入測試。

您可以簡單地實現並注入您的自定義身份驗證器,spring-security將處理重定向。