Spring Security最大会话超时不工作
我们有这个Spring Security最大会话超时不工作,spring,hibernate,session,thymeleaf,Spring,Hibernate,Session,Thymeleaf,我们有这个 http.sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(true) 及 及 在 在application.properties中,我们有 server.servlet.session.timeout=3m 当用户尝试登录时,用户输入密码+用户名,然后向用户发送一次代码。在此之后,用户需要放置此代码,然后才能查看页面 但若用户不输入该代码,只输入用户名+密码,并关闭浏览器,则注销不起作用。因为不调用注
http.sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(true)
及
及
在
在application.properties中,我们有
server.servlet.session.timeout=3m
当用户尝试登录时,用户输入密码+用户名,然后向用户发送一次代码。在此之后,用户需要放置此代码,然后才能查看页面
但若用户不输入该代码,只输入用户名+密码,并关闭浏览器,则注销不起作用。因为不调用注销
但是超时应该在3分钟后起作用并终止。或者tomcat应该终止会话(因为我们部署到外部tomcat 9)
我试过这个
我补充说
@Bean
public static ServletListenerRegistrationBean httpSessionEventPublisher() {
return new ServletListenerRegistrationBean(new HttpSessionEventPublisher());
}
但还是一样
我把
在公共类CustomAuthenticationProviderWithRoles中实现AuthenticationProvider{
并尝试了大量登录,但没有一次性代码确认,并且看到会话正在增加
但是当我尝试放置一次性代码时,它不允许,因为maxSessionsPreventsLogin
就像这里:
登录页面代码:
<form method="POST" th:action="@{/login}">
<input autocomplete="off" class="form-control" id="mobile" name="username"
type="text">
<input autocomplete="off" class="form-control password" name="password"
type="password">
<button class="btn btn btn-block btn-primary btn-lg"
type="submit"
value="Log In">LOGIN
</button>
而successhandler为成功登录执行以下操作:
response.sendRedirect("/otp");
然后,它设置放置代码的秒数,并发送另一个视图来放置代码,其中包含另一个表单和提交按钮
什么是最佳实践?例如,用户可以在输入用户名密码后关闭页面,但会话仍然存在。尽管存在超时
我可以使用它并解决它,但我已经在应用程序中设置了会话超时。属性:
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response
request.getSession(false).setMaxInactiveInterval(11);
尝试此方法,并给出有关您的结果的响应。我以前已经使用过它,并且已经起作用了(请参阅相关部分:
我可以使用它,它解决了问题,但我已经在应用程序中设置了会话超时。属性:
)但是我已经在application.properties中设置了它。为什么我们还需要它呢?使用会话输出的web.xml
配置,它会覆盖tomcat会话属性的配置,并使用您配置的属性。所以您应该先尝试它。我说我尝试过,它工作了,但不是全局的。
List<SessionInformation> sessions = sessionRegistry.getAllSessions(authentication.getPrincipal(), false);
@Override
public Authentication authenticate(Authentication authentication) {
<form method="POST" th:action="@{/login}">
<input autocomplete="off" class="form-control" id="mobile" name="username"
type="text">
<input autocomplete="off" class="form-control password" name="password"
type="password">
<button class="btn btn btn-block btn-primary btn-lg"
type="submit"
value="Log In">LOGIN
</button>
http
.formLogin()
.loginPage("/login").permitAll()
response.sendRedirect("/otp");
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response
request.getSession(false).setMaxInactiveInterval(11);