Spring Security 会忘记身份验证或需要多次登录尝试

e3bfsja2  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(321)

我有一个基本的spring启动应用程序,由Spring Security 和表单登录保护。当我调用需要身份验证的站点时,会显示登录表单,这很好。但在我登录后,以下事情之一似乎是随机发生的:
网站显示成功
我被重定向到“/”(如果我设置了默认成功url,则为默认成功url)
再次出现登录表单(然后重复整个过程)
即使登录成功并且站点出现,如果我重复请求,登录表单也会出现(好像我已注销)。
更奇怪的是,我的应用程序被部署了多次,这只发生在生产部署中,唯一的区别是数据库有更多的条目。
有人能解释为什么会这样吗?这是时间问题吗?
我的安全配置:

@Configuration
public class LoginSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .and()
            .csrf().disable();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/webjars/**");
            web.ignoring().antMatchers("/js/**");
            web.ignoring().antMatchers("/css/**");
            web.ignoring().antMatchers("/images/**");
            web.ignoring().antMatchers("/public/**");
    }
}

我的主控制器中还有一个thymeleaf站点:

@RequestMapping(value = "/site", method = RequestMethod.GET)
    public String site() {
        return "site";
    }

文件site.html包含一些javascript、jquery、bootstrap和一些数据:

<!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:th="http://www.thymeleaf.org">
        <head lang="en">
            <meta charset="utf-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>

            <link rel="stylesheet" th:href="@{/webjars/bootstrap/4.6.0/css/bootstrap.min.css}" />

            <script th:src="@{/webjars/jquery/jquery.min.js}"></script>
            <script th:src="@{/webjars/popper.js/umd/popper.min.js}"></script>
            <script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
        </head>
        <body>
    ...
gfttwv5a

gfttwv5a1#

问题是,出于性能原因,应用程序方式部署到heroku上的多个dyno(容器),因此即使我在一个dyno成功登录,如果我的下一个请求被委托给另一个dyno,它也没有正确的会话,因此它将我注销并给我一个新会话。

相关问题