2015-06-16 4 views
0

Мне нужно добавить фильтр на некоторые страницы, который проверяет, установлены ли некоторые атрибуты сеанса.Access PortletSession (ApplicationScope) в Liferay Filter Hook

Что я хочу достичь: пользователь пытается непосредственно перейти на страницу. На этой странице есть 3 портлета, которым нужны SessionVariables. Они заданы на предыдущей странице. Итак, если эти переменные недоступны, должно произойти перенаправление на предыдущую страницу.

Так что я искал, чтобы добавить фильтр крюк, поэтому реализует класс фильтра

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() метод, который я установил с session.setAttribute("name", value, PortletSession.APPLICATION_SCOPE);?

ответ

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); 
} 

Это все!

Смежные вопросы