Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Security最大会话超时不工作_Spring_Hibernate_Session_Thymeleaf - Fatal编程技术网

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