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);
}
這樣無論如何,它會產生一個重定向循環,因爲它永遠不會到達由於攔截和重定向導致重定向頁面。
有很多方法可以解決這個問題,但我不知道如何實現這些目標:
- 檢測請求的網址(但我不知道如何),不檢查認證登錄頁面。此外,我想讓這個解決方案更加靈活。
- 直接在控制器上選擇登錄處理程序。我怎麼做?可能嗎?
- 我在例子中看到人們使用org.springframework.web.servlet.handler.SimpleUrlHandlerMapping指定攔截器映射,無論如何我使用註釋。有沒有一種方法,使用註釋,爲攔截器指定一個不同的映射,以便它不會觸發上述地址(accise?action = login)?或者,也許鏈接不同的映射方案?