- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在研究受 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/
我正在将基于 Servlet 2.5 的 webapp 迁移到 Servlet 3.0,遇到了这个问题,我不知道如何将这些不同的过滤器映射压缩到一个 @WebFilter 注释中类。 过滤器:
考虑我的 web.xml 中的以下过滤器映射 rememberMeCookieFilter /* mustBeSignedInFilter /private/*
如果是这样,你怎么做? 是的,这听起来像是我的最后一个问题。它本质上是相同的问题。我有一个 @javax.servlet.annotation.WebFilter直接打包到 war 中时效果很好。现在
我有一个使用 Spring Boot 2.0.0.M5/2.0.0.BUILD-SNAPSHOT 的 Spring Boot WebFlux 应用程序。我需要将跟踪 ID 添加到所有日志中。 为了让它
类可以用@WebFilter(urlPatterns="*")注释,但spring不会根据请求运行它。为什么?如果我向 Application 类添加 @ServletComponentScan 注释
我一直在研究受 balusC 的 answers 启发的代码。 。基本上它是一个网络过滤器,如果有记住我的cookie,它会尝试登录用户。 登录发生后,它首先从 userService-EJB 获取
我正在尝试将 WebFilter 与 JSF 2 结合使用,但我的过滤器无法正常工作。无法识别 urlPattern。 我的过滤器类: @WebFilter(urlPatterns = {"/rws/
虽然我似乎有它们的“精确”副本,但我已经阅读了很多示例,所以我无法弄清楚为什么当我导航到 /login 而不是 /时我的过滤器会执行限制/*。我已尝试使用注释(如下例所示)和 XML 来定义 WebF
我正在尝试在我的 Spring 应用程序中添加 WebFilter。但是,我没有使用 .xml 文件(甚至没有 web.xml,因为我的应用程序不需要它)。 因此,我添加到扩展 AbstractAnn
我想实现一个 WebFilter,它读取传入请求的特定 header ,使用此 header 的值向另一个响应式(Reactive) REST 端点调用 GET 请求,然后使用 GET 响应的值改变原
我在 urlrewrite.xml 中有以下配置: ^(/event/showEventList)(\.{1})(\bhtm\b|\bhtml\b)(\?{0,1})(
我想在 webfilter 配置 Spring 应用程序中使用通配符/{login}/cart/* 添加此路径的过滤器,但 {login} 的通配符不起作用 @Bean public FilterRe
我的代码中有一个具有以下设置的过滤器。我映射了值请求中的所有内容 @WebFilter(value="/*", dispatcherTypes={DispatcherType.REQUEST, Di
我正在使用 Google Admob,当我删除 testDevice 行时,我在控制台屏幕上看到日志下方。这是什么意思?有什么问题吗?或者我需要忽略这些日志行。 To get test ads on
我正在尝试遵循有关使用 Guice 作为 Web 服务器的最小教程,而不需要 web.xml:http://www.remmelt.com/post/minimal-guice-servlet-wit
我使用过滤器检查登录用户的 URL 模式。 但是我有很多 URL 模式需要过滤。 { "/table/*", "/user/*", "/contact/*", "/run/*", "/conf/*",
我创建了一个过滤器,我可以在其中访问有效负载的主体并对其执行一些逻辑(现在假设我记录主体)。在最后一步中,我返回了 Mono,但是当请求通过 Controller 继续发送到服务时,它会抛出请求正文丢
我正在尝试实现一个 WebFilter 来检查 JWT 并在检查失败或结果无效时抛出异常。我有一个处理这些异常的 @ControllerAdvice 类。但它不起作用。 这是 WebFilter 类:
我在 header 中使用 JWT 来验证用户请求。 @Override public Mono filter(ServerWebExchange exchange, WebFilterChain c
在我的应用程序中,我有一个 WebFilter。这个 Webfilter 应该检查一个 coockie。但是使用 FacesContext.getCurrentInstance() 会导致 Nullp
我是一名优秀的程序员,十分优秀!