Security 在JSF2.0中显示从受保护页面发回的用户信息

Security 在JSF2.0中显示从受保护页面发回的用户信息,security,jsf-2,Security,Jsf 2,我有一个JSF应用程序,左边有一个div,在主页上显示登录用户的用户名 我将登录的用户信息存储在sessionScoped托管bean中 我在主页上有几个受保护的页面,我使用容器管理的JDBC领域 如果用户在没有登录的情况下直接单击链接,容器管理的安全性将启动并要求用户登录,这很好 现在,如果用户点击后退按钮,浏览器将显示主页面。现在我如何在这里显示用户名,因为我的托管bean没有被触发 此外,浏览器似乎会缓存页面,并且确实会从服务器请求页面。谁能帮我照点光吗 谢谢, Goutham禁用动态JS

我有一个JSF应用程序,左边有一个div,在主页上显示登录用户的用户名

我将登录的用户信息存储在sessionScoped托管bean中

我在主页上有几个受保护的页面,我使用容器管理的JDBC领域

如果用户在没有登录的情况下直接单击链接,容器管理的安全性将启动并要求用户登录,这很好

现在,如果用户点击后退按钮,浏览器将显示主页面。现在我如何在这里显示用户名,因为我的托管bean没有被触发

此外,浏览器似乎会缓存页面,并且确实会从服务器请求页面。谁能帮我照点光吗

谢谢,
Goutham

禁用动态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}" />

禁用动态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}" />


Hi BalusC,这种方法效果很好。谢谢你的回答。嗨,巴卢斯克,这个方法工作得很好。谢谢你的回答。