Отображение информации пользователя о обратной передаче с защищенных страниц в JSF 2.0 - PullRequest
1 голос
/ 23 августа 2011

У меня есть приложение JSF с элементом div, который отображает имя пользователя, вошедшего в систему, на главной странице.

Я храню информацию о зарегистрированных пользователях в управляемом компоненте sessionScoped.

У меня есть пара защищенных страниц на главной странице, для которых я использую управляемую контейнером область JDBC.

Если пользователь непосредственно нажимает на ссылки без входа в систему, система безопасности, управляемая контейнером, активируется и просит пользователя выполнить вход, что нормально.

Теперь, если пользователь нажимает кнопку возврата,браузер отображает главную страницу.Теперь, как мне отобразить здесь имя пользователя, поскольку мой управляемый компонент не был запущен.

Кроме того, браузер, похоже, кэширует страницу и запрашивает страницу с сервера.Может ли кто-нибудь пролить немного света, пожалуйста.

Спасибо, Goutham

1 Ответ

1 голос
/ 23 августа 2011

Отключить кеширование браузером динамических страниц JSF.Создайте фильтр , который сопоставлен с *.xhtml и выполняет следующую процедуру в методе doFilter():

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpRes = (HttpServletResponse) response;

    if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
        httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        httpRes.setDateHeader("Expires", 0); // Proxies.
    }

    chain.doFilter(request, response);
}

Таким образом браузер вынужден отправлять полный HTTP-запрос вместоотображение страницы из кэша браузера.

Для отображения имени пользователя для входа в систему управляемой безопасности контейнера я бы, кстати, просто использовал #{request.remoteUser}.

<h:outputText value="Welcome, #{request.remoteUser}!" rendered="#{not empty request.remoteUser}" />
<h:link value="Login" outcome="login" rendered="#{empty request.remoteUser}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...