我有一个基本的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>
...
1条答案
按热度按时间gfttwv5a1#
问题是,出于性能原因,应用程序方式部署到heroku上的多个dyno(容器),因此即使我在一个dyno成功登录,如果我的下一个请求被委托给另一个dyno,它也没有正确的会话,因此它将我注销并给我一个新会话。