微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Spring Security 忘记身份验证或需要多次登录尝试

我有一个由 Spring Security 和表单登录保护的基本 Spring Boot 应用程序。当我调用需要身份验证的站点时,会出现登录表单,这很好。但是在我登录后,似乎是随机发生了以下事情之一:

  • 网站显示成功
  • 我被重定向到“/”(或者如果我设置了认成功 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>
    ...


解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?