首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季安全在负载平衡(AWS Bean秸秆)环境中失败?

春季安全在负载平衡(AWS Bean秸秆)环境中失败?
EN

Stack Overflow用户
提问于 2014-08-06 13:49:37
回答 2查看 3.5K关注 0票数 4

我正在编写一个在现有环境中运行良好的现有代码。应用程序有一个登录表单,在用户登录后将用户带到登陆页面。

我的问题是:当我将应用程序移动到AWS Bean秸秆(有2个实例)时,成功的登录会将用户带回到登录页面

该应用程序是基于Spring的(MVC,Security),具有以下安全配置:

代码语言:javascript
复制
<security:http use-expressions="true">
    <security:intercept-url pattern="/" access="permitAll" />
    <security:intercept-url pattern="/index.html" access="permitAll" />
    <security:intercept-url pattern="/login.html" access="permitAll" />

    ... bunch of other pages ....

    <security:intercept-url pattern="/secure/**" access="isAuthenticated()" />


    <security:form-login login-page="/login.html"
        default-target-url="/secure/landing.html"
        authentication-failure-url="/login.html?login_error=1" />

    <security:logout logout-url="/logout.html"
        logout-success-url="/login.html" />
</security:http>

当用户登录时,应用程序在单个节点环境中运行良好,例如日志跟踪:

1: [http-bio-8080-exec-1除错DefaultRedirectStrategy - sendRedirect -重定向到'/myapp/secure/landing.html‘ 'org.springframework.security.core.context.SecurityContextImpl@86073c69: 2: http-bio-8080-exec-1除错HttpSessionSecurityContextRepository - saveContext - SecurityContext存储到HttpSession: /*一些详细信息*/授予权限: ROLE_USER‘ 3: http-bio-8080-exec-1除错SecurityContextPersistenceFilter - doFilter - SecurityContextHolder已清除,请求处理完成。 4: http-bio-8080-exec-1除错AntPathRequestMatcher -匹配-检查请求的匹配:‘//landing.html’;针对'/resources/**‘

当这个应用程序(我们获取了完全相同的war文件)进入AWS Bean秸秆环境,配置了2个实例时,就会发生这样的情况:

1: http-bio-8080-exec-7调试DefaultRedirectStrategy - sendRedirect -重定向到'/secure/landing.html‘ 2: http-bio-8080-exec-7调试HttpSessionSecurityContextRepository - createNewSessionIfAllowed - HttpSession是非默认的。 'org.springframework.security.core.context.SecurityContextImpl@a3421210: 3: http-bio-8080-exec-7除错HttpSessionSecurityContextRepository - saveContext - SecurityContext存储到HttpSession: /*一些详细信息*/授予权限: ROLE_USER‘ 4: http-bio-8080-exec-7除错SecurityContextPersistenceFilter - doFilter - SecurityContextHolder已清除,请求处理完成。 5: http-bio-8080-exec-9调试AntPathRequestMatcher -匹配-检查请求的匹配:'/login.html';针对'/resources/**‘

逐行比较:

  • AWS日志有1行额外的行,第2行
  • 在最后一行的第5行中,AWS日志显示了从exec-7到exec-9的线程更改(因此它失去了最初的请求重定向并将其替换回/login.html,而不是/secure/landing.html)

为了解决AWS中正在发生的问题,重新配置豆茎只使用1个实例似乎可以将问题隐藏起来。

知道在多节点环境中失败的配置缺少什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-06 14:54:09

在使用负载均衡器时,您必须记住,每个请求都可能以不同的实例结束。在这种情况下,服务器1上存储的任何信息都将无法用于服务器2。在进行用户身份验证时,有几种方法可以解决这个问题:

  • 使用第三方维护身份验证信息。
  • 使用粘性会话-将负载均衡器配置为始终在http会话期间转发到一台服务器。
票数 4
EN

Stack Overflow用户

发布于 2014-11-21 21:07:02

根据春季安全文档,您需要确保使用非线程本地模式设置SecurityContextHolder bean。默认情况下,我认为它是使用MODE_THREADLOCAL设置的,它似乎不存在于弹性豆柄设置的线程系统中。

strategyName = SecurityContextHolder.MODE_INHERITABLETHREADLOCALMODE_GLOBAL注入您的SecurityContextHolder bean,并让我知道它是否有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25162131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档