gpt4 book ai didi

java - Webfilter 只能在第二个响应中登录用户(记住我)

转载 作者:行者123 更新时间:2023-12-01 14:47:54 24 4
gpt4 key购买 nike

我一直在研究受 balusC 的 answers 启发的代码。 。基本上它是一个网络过滤器,如果有记住我的cookie,它会尝试登录用户。

登录发生后,它首先从 userService-EJB 获取 MyUser 实体并将其放置在 MUserSessionBean 中,该 MUserSessionBean 是一个 @SessionScoped jsf-ManagedBean

问题是在第一个响应中,用户显示为未登录。

但在日志中我可以看到它正在登录,如果我只是在浏览器中请求页面刷新,响应将显示已登录的用户。

我尝试在登录后在一些不同的地方放置重定向,但是当我尝试这样做时页面布局中断了..

如何在第一次响应中成功显示登录用户?

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);
}

最佳答案

据我所知,您实际上并没有在第一次登录时让用户登录。到目前为止,您所做的只是在创建的 session 中设置一个值,而容器没有实际对用户进行身份验证。

“记住我”功能要求您使用通过“记住我” token 提取的凭据代表用户对领域进行身份验证。你还没有这样做。即使在页面刷新时显示用户已登录,从技术上讲,这也是不正确的。它仅显示为已登录,因为

     if (mUserSessionBean != null && mUserSessionBean.getCurrentUser() == null) 

第一次请求页面后解析为true并跳过所有检查。后续请求会通过只是因为您在 session 中强制放置了 MyUser 实例。实际上,用户尚未登录,这可能是导致应用程序中其他地方发生分页符的原因。

您需要根据领域对用户进行真正的身份验证,以实现和平统治:)

    if (uuid != null) {
MyUser user = userService.findUserByUUID(uuid);

if (user != null) {
request.login(user.username,user.password); //Authenticate!!!!
mUserSessionBean.setCurrentUser(user);
CookieUtil.addCookie(response, CookieUtil.COOKIE_NAME, uuid, CookieUtil.COOKIE_AGE);
} else {
CookieUtil.removeCookie(response, CookieUtil.COOKIE_NAME);
}
}

关于java - Webfilter 只能在第二个响应中登录用户(记住我),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com