这些页面配置为.authorizerequests().antmatchers(“/”、“/home”、“/about”).PermitAll().
我启用了无效会话选项来处理经过身份验证的用户:.SessionManagement().invalidSessionURL(“/errors/invalidSession”)
。如果我注释掉该选项,那么除了步骤#10-SessionManagementFilter
看到请求的会话ID无效(#9),但没有启动新会话并执行重定向(#10)之外,上面描述的所有内容都完全相同。
为什么?我可以做什么来保留无效会话选项,但正确地处理匿名用户,即不被重定向?或者这是不可能的,我将不得不单独处理经过身份验证的用户?如果有人能帮助我理解这里发生的事情,并为我指明解决这个问题的方向,我将非常感激。如果您需要查看我的完整http配置,请告诉我。
编辑
我对匿名和注册(经过身份验证)的用户运行了一系列测试。如果启用.sessionmanagement().invalidsessionURL(“/errors/invalidsession”)
,那么这两种类型的用户最终都会到达错误页面。未选中RememberMe的经过身份验证的用户与anon用户相同。如果选中了RememberMe,则一旦RememberMe超时,就会出现错误页。
如果禁用invalid session选项,则不会有用户获得错误页(这是有意义的)。这两种类型的用户都可以浏览公共页面,只要他们愿意,经过身份验证的用户将被要求在会话或RememberMe过期后登录。
if (invalidSessionStrategy != null) {
invalidSessionStrategy
.onInvalidSessionDetected(request, response);
return;
}
if (createNewSession) {
request.getSession();
}
redirectStrategy.sendRedirect(request, response, destinationUrl);
好吧,所以在过去的几周里,我一直在研究Spring Security,试图理解它是如何结合在一起的。我还在学习,但对于这种特殊的情况,我找到了两种有效的方法。
显而易见的一个方法是绕过公共页面的安全性,如下所示:
@Override
public void configure(WebSecurity web) throws Exception
{
web
.ignoring()
.antMatchers("/", "/home", "/about", "/login**", "/thankyou", "/user/signup**", "/resources/**")
;
}
我对web安全的总体了解还不够,不知道这是否是一种可接受的方法,但它允许匿名用户浏览站点W/O而获得无效的会话错误。
authCookie.setCookie(request, response, "anonymousUser");
or
authCookie.setCookie(request, response, authentication.getName());
我目前使用实际登录只是为了测试目的--它最终只是一个简单的是/否指示器。CustomLogoutSuccessShandler
将其重置为anonymousUser
无效会话方法如下所示:
@Override
public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String url = destinationUrl;
//reset context default value
redirectStrategy.setContextRelative(false);
if (authCookie.isCurrentCookieAnonymous()) {
//pass the URL originally requested by the anonymous user
url = request.getRequestURI();
//the URL needs to have the context removed
redirectStrategy.setContextRelative(true);
}
//always revert to anonymous user
authCookie.setCookie(request, response, "anonymousUser");
logger.debug("Starting new session (if required) and redirecting to '" + url + "'");
if (createNewSession)
request.getSession();
redirectStrategy.sendRedirect(request, response, url);
}
同样,如果需要,我可以发布完整的课程。
@Bean
public SessionManagementBeanPostProcessor sessionManagementBeanPostProcessor() {
return new SessionManagementBeanPostProcessor();
}
protected static class SessionManagementBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
if (bean instanceof SessionManagementFilter) {
SessionManagementFilter filter = (SessionManagementFilter) bean;
filter.setInvalidSessionStrategy(new RedirectInvalidSession("/errors/invalidSession"));
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
return bean;
}
}
我想知道我使用匿名登录方法的应用的用户会发生什么情况。 Firebase文档非常糟糕,没有解释所有的事情,希望开发者自己去发现。我在它的旧版本文档中发现,匿名会话将根据登录中设置的到期时间到期 我找到了这个答案,但它真的是不可接受的。如果你做一个网络应用程序,让每件事都变得困难,匿名用户的数量会增长非常非常快。我甚至无法在我的仪表板中看到我的应用程序用户的数量!!!!!那么,我该怎么办?我应该自己
问题内容: 我正在使用express (最新)和以下代码: POST重定向到GET,但PUT重定向到PUT。是否可以将PUT重定向到GET(与POST相同)? 问题答案: 在详细讨论之前,下面是解决问题的一种方法: 默认情况下,Express使用HTTP代码302进行重定向。根据HTTP规范,这可以防止POST / PUT请求被重定向为POST / PUT请求,并解释了您在代码中观察到的内容: 如
问题内容: 就在今天,我需要一种在不同对象之间传递函数的方法。我很快了解到您不能直接在Java中做到这一点,但是您可以传递一个wht实例,该实例显然被称为“匿名内部类”,如下所示: 定义类: 使其成为一个实例: 并称之为: 很简单。但是我不明白的是为什么它被称为“匿名”。我不只是给它起名字MyCallback吗?命名的东西不能匿名,对吗?请避免对这个术语感到困惑。 问题答案: 不,您说的是MyCa
我第一次在设置simpleSAMLphp服务提供商时遇到了一些麻烦。 我将服务提供商配置为: 我还配置了身份提供者,它似乎工作正常。但是,当用户从idp重定向回simpleSAMLphp时,将显示simpleSAMLphp安装页面(其中包含一些测试工具)。 我的测试使用以下代码: 当我尝试使用“测试配置的身份验证源”工具登录时,我也会返回安装首页,而不是我应该获得的属性概述。 我试图检查idp发送
我不能在设置cookie后返回任何地方,cookie设置正确,但在设置cookie后,它不会重定向任何地方。 下面是我的代码: 下面是JavaScript的功能: 这是我的函数,但不重定向到索引或其他任何地方:
我试图将spring oauth2(基于java的配置而不是引导)与angular 6集成, 我的WebSecurityConfigurerAdapter.java文件是: 我的身份验证提供程序是: 后端出现错误: