2015-06-16 24 views
0

我需要在某些頁面上添加一個過濾器,用於檢查是否設置了某些Session屬性。在Liferay過濾器鉤子中訪問PortletSession(ApplicationScope)

我想實現的是:用戶嘗試直接導航到頁面。在該頁面上,有3個需要SessionVariables的Portlet。這些由前一頁設置。所以,如果這些變量不可用,就必須重定向到前一頁。

所以我一直在尋找添加過濾器掛鉤,所以類實現過濾

public class SampleFilter implements Filter { 

    @Override 
    public void destroy() { 
     /* Destroy method*/ 
    } 

    @Override 
    public void doFilter(
      ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { 

     /* I need to access the PortletSession here! */ 

     filterChain.doFilter(servletRequest, servletResponse); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) { 
     /*Method to init filter..*/ 
    } 

} 

是否有可能簽入doFilter()方法的變量,我已經設置與​​?

回答

1

好吧,我發現這一點:

因爲會話屬性,其中作用域「APPLICATION_SCOPE」,這是有可能通過HttpSession中對其進行訪問:例

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { 

     HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; 
     HttpSession session = httpServletRequest.getSession(); 
     log.debug(session.getAttribute("applicationScopedName")); 

     filterChain.doFilter(servletRequest, servletResponse); 
} 

這一切!