balusC の回答の 1 つから着想を得たコードで遊んでいます。基本的には、remember me cookie がある場合にユーザーのログインを試みる webfilter です。
ログインは、最初に 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);
}