2013-12-17 35 views
1

場景:有一個使用AngularJS UI路由的Web應用程序。
什麼做:在名爲FirstPageFilter.java一個Servlet過濾器會創建第一次會議。如果使用AngularJS路由,如何在servlet過濾器中提供url-pattern?

@WebFilter(filterName="FirstPageFilter",urlPatterns="/*") 
public class FirstPageFilter implements Filter{ 

@Override 
public void destroy() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 
    HttpServletRequest httpRequest = (HttpServletRequest)request; 
    HttpSession session = httpRequest.getSession(true); 
    FNBaseSessionObject sessionObject = (FNBaseSessionObject)session.getAttribute("sessionObject"); 
    if (sessionObject != null) { 
     filterChain.doFilter(request, response); 
     return; 
    } 
    /*else{ 
     System.out.println("Not going anywhere....."); 
    }*/ 
} 

@Override 
public void init(FilterConfig arg0) throws ServletException { 
    /*System.out.println("filter initialized");*/ 
} 

} 

現在它應用在所有pages.But我只想應用它home-page.html。

的index.html

<div id="wrapper"> 
    <div id="container"> 
     <div ui-view></div> 
     <div ng-include="'footer.html'"></div> 
    </div> 
</div> 

我已經做了UI路由上的index.html。默認情況下,家庭頁面將shown.Which我已經在routing.js提供

routing.js

ribWeb.config(['$stateProvider','$urlRouterProvider', 
       function ($stateProvider, $urlRouterProvider) { 
$urlRouterProvider.otherwise('home-page'); 

$stateProvider.state('home-page', { 
    url: '/home-page', 
    templateUrl: 'home-page.html' 
}); 

什麼,我試圖做:我想在這種情況下管理會話。首次訪問home-page.html時,將創建會話並在其他會話中獲得會話。如果會話在特定時間後失效,則必須返回home-page.html頁面。

我很困惑如何爲home-page.html提供urlPattern。我曾嘗試使用/ home-page和/home-page.html 但是,在兩種情況下,filter都被初始化,但doFilter沒有被調用。

有什麼我做錯了嗎?我應該提供哪些Url模式?

回答

1

Angular的路徑位於URL的散列/片段部分(即在#部分之後)。這些純粹是客戶端,永遠不會到達服務器,這意味着您不能使用這些服務器篩選器來跟蹤ui-router狀態之間的移動。

什麼通常做的是設置您的服務器,這樣的要求應該有一個會話返回401個狀態碼的時候沒有會話,並在您的客戶端提供的是一個interceptor通過路由應用程序通常處理所有這些錯誤的到適當的頁面(通常是登錄頁面)。

+0

我想只在客戶端管理會話。這可能嗎?因爲我也沒有得到401狀態 – RajputAdya

+0

只有在客戶端上管理會話而不從服務器獲取更新是不可能的,因爲會話是在服務器上進行的(除非會話由服務器設置的某個cookie代表過期日期或類似的東西)。無論如何,我相信在大多數情況下,正確的選擇正如我所描述的(讓服務器檢查您是否正在處理每個請求的會話) – abyx

+0

哦對不起。我的意思是服務器端。 – RajputAdya

相關問題