Как перенаправить на страницу ошибки в JSF, когда атрибут сеанса FacesContext не найден - PullRequest
1 голос
/ 14 октября 2011

Я разрабатываю мобильное веб-приложение с использованием JSF и Apache myFaces 1.2.9.

Во время аутентификации я вызываю сервлет, который выполнит аутентификацию, а затем установит некоторый атрибут в сеансе.

И в каждом конструкторе управляемого бина я проверяю этот атрибут сеанса и, соответственно, устанавливаю логическое значение. Это логическое значение я устанавливаю в качестве значения для визуализируемого атрибута tr: document. Что-то вроде этого

<tr:document title="someid" rendered="#{controller.render}">
//SOME PAGE CONTENTS
</tr:document>

На основе атрибута сеанса страница может отображаться или нет. Я хочу обработать эту проблему более изящно.

Я задал этот вопрос в SO, который сообщает об использовании фильтров.Я использовал фильтр, как показано здесь .

Я изменил webFilter urlPattern на /faces/jsp/*, поскольку я хочу проверить атрибут сеанса для каждого jsp.

В doFilter () метод, который я проверяю для атрибута сеанса, подобного этому, и если он null, я перенаправляю на неверную страницу пользователя.

System.out.println("In doFilter");
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            HttpSession session = request.getSession(false);

            if (session.getAttribute("myattribute") == null) {
       response.sendRedirect(properties.getProperty(INVALID_USER_REDIRECTURL, true));  // No attribute found, so redirect to Invalid user page.
            } else {
                chain.doFilter(req, res); // attribute found, so just continue request.
            }

Но я не вижу свой фильтр getting сработал, так как я не вижу никаких отладочных операторов, которые я хранил в своем фильтре init(),doFilter() методы.

Любая помощь?

РЕДАКТИРОВАТЬ: Я только что прошел через это сопоставление фильтров в моей сети.xml

<filter>
    <filter-name>trinidad</filter-name>
    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>trinidad</filter-name>
    <servlet-name>faces</servlet-name>
  </filter-mapping>

Полагаю, у моих лиц есть какой-то фильтр. Могу ли я иметь еще один мой?

1 Ответ

1 голос
/ 14 октября 2011

Сопоставьте фильтр с шаблоном URL, где сопоставлен ваш FacesServlet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...