注销后如何清除用户主体?

时间:2011-04-18 14:56:03

标签: java jaas principal

案例很简单:用户点击退出,转到LogoutFilter并:

    HttpServletRequest hreq = (HttpServletRequest) request;
    hreq.getSession(false).invalidate();

    HttpServletResponse httpResponse = (HttpServletResponse) response;

    httpResponse.reset();

    httpResponse.setHeader("Cache-Control", "no-cache");
    httpResponse.setHeader("Pragma", "no-cache");
    httpResponse.setHeader("Cache-Control", "no-store");
    httpResponse.setHeader("Cache-Control", "must-revalidate");
    httpResponse.setDateHeader("Expires", 0);

    chain.doFilter(request, response);

在页面上显示登录链接。问题很简单:会话重新创建,但用户主体是chached,因此没有显示登录弹出窗口,应用程序使用缓存的主体,因为request.getUserPrincipals()不返回null对象。

问题很简单:有没有办法删除用户主体,所以浏览器要求在注销后再次登录?

2 个答案:

答案 0 :(得分:0)

除了在注销时清除缓存之外,还要为应用程序提供一个过滤器,该过滤器始终将这些元值设置为响应,以应对应用程序中页面的每个请求。这样,您的所有页面都不会被缓存。清除浏览器缓存,然后重试。这有什么作用吗?

答案 1 :(得分:0)

当用户注销时,我会考虑在您的会话无效后将它们(使用302重定向)重定向到“已注销”页面。 “希望”会阻止request.getUserPrincipals()返回任何内容。

顺便说一下,你正在做的缓存工作对你的web应用程序缓存没有任何作用。您在那里指定的是Web客户端和Web代理应该如何考虑缓存该特定请求。因此,这些值在请求离开您的服务器后使用,并且“进入疯狂”。