我一直在玩从 balusC 的答案之一启发的代码。基本上它是一个网络过滤器,如果有一个记住我的 cookie,它会尝试登录用户。
登录发生后,它首先从 userService-EJB 获取 MyUser 实体并将其放置在作为 @SessionScoped jsf-ManagedBean 的 MUserSessionBean 中
问题是在第一个响应中,用户显示为未登录。
但是在日志中我可以看到它正在登录,如果我只是在浏览器中请求页面刷新,响应将显示登录用户。
登录发生后,我尝试在不同的地方放置重定向,但是当我尝试这样做时页面布局中断..
如何在第一响应中成功显示登录用户?
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
MUserSessionBean mUserSessionBean = (MUserSessionBean) request.getSession(true)
.getAttribute("mUserSessionBean");
if (mUserSessionBean != null && mUserSessionBean.getCurrentUser() == null) {
String uuid = CookieUtil.getCookieValue(request, CookieUtil.COOKIE_NAME);
if (uuid != null) {
MyUser user = userService.findUserByUUID(uuid);
if (user != null) {
mUserSessionBean.setCurrentUser(user);
CookieUtil.addCookie(response, CookieUtil.COOKIE_NAME, uuid, CookieUtil.COOKIE_AGE);
} else {
CookieUtil.removeCookie(response, CookieUtil.COOKIE_NAME);
}
}
}
// pass the request along the filter chain
chain.doFilter(req, res);
}