- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个典型的 Spring MVC 在 Tomcat 上运行。将系统切换为在 HTTPS 上运行(在纯 HTTP 下一切正常)后,登录停止工作。原因是Spring的SecurityContextHolder.getContext().getAuthentication()
对象在使用RedirectView
后变成了null
。
我已经搜索过答案,我发现的唯一一个建议在 viewResolver
bean 设置中将属性 redirectHttp10Compatible
设置为 false
。这没有帮助。
我还检查了在整个重定向过程中,我的 session ID 保持不变并且连接保持安全,即它不是 http 和 https 之间的更改(至少据我所知)的问题,反之亦然。
可能是什么问题?
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config="true">
<intercept-url pattern="/**" requires-channel="https" />
<intercept-url pattern="/index*" access="ROLE_USER"/>
<intercept-url pattern="/dashboard*" access="ROLE_USER" requires-channel="https"/>
<intercept-url pattern="/login*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/>
<intercept-url pattern="/signin*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/>
<intercept-url pattern="/signup*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/>
<form-login login-page="/home"
default-target-url="/home"
authentication-failure-url="/home?authentication_error=true"
authentication-success-handler-ref="redefineTargetURL"
/>
<anonymous username="guest" granted-authority="ROLE_GUEST" key="anonymousKey"/>
<logout invalidate-session="true" logout-success-url="/logout?message=Logout Successful" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService" />
</authentication-manager>
<beans:bean id="redefineTargetURL" class="com.groupskeed.common.RedefineTargetURL" />
<beans:bean id="userDetailsService" class="com.groupskeed.security.UserDetailsServiceImpl" />
最佳答案
SecurityContextHolder.getContext().getAuthentication()
在重定向后变为空是正确的,因为它是线程绑定(bind)的。但它应该从 session 中重新填充。因此尝试跟踪 session 中的 SPRING_SECURITY_CONTEXT
属性。下面是一些示例代码来获得一个想法:
HttpSession session = request.getSession(true);
System.out.println(session.getAttribute("SPRING_SECURITY_CONTEXT"));
在 Spring Security 文档中,有一部分是关于 HTTPS/HTTP 切换如何搞砸 session 的,也许其中某处暗示了您的问题。 http://static.springsource.org/spring-security/site/faq.html#d0e223
上面的常见问题解答导致对 session 在您的应用程序中的处理方式进行检查。我可能会开始研究 AuthenticationSuccessHandler 实现。 (如果您愿意,可以将其发布到您的问题中。)
有关如何在 Web 应用程序中处理安全上下文的更多详细信息,请参阅以下内容:(section 5.4 Authentication in a Web Application):http://static.springsource.org/spring-security/site/docs/3.0.x/reference/technical-overview.html
关于java - 在 HTTPS/SSL 中使用 RedirectView 后 Spring 的 SecurityContextHolder.getContext().getAuthentication() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952718/
我开始学习WebGL,因为我找到了一些旧教程,我不知道在2014年什么是正确的方法? 我启动了 (基本),并且在教程中他们说了类似的话: use getContext('2d') and if yo
我的 fragment 中多次需要上下文: ... account.restore(getContext()); ... dbHelper = new DBHelper
尝试根据 Youtube 上的教程创建 HTML5 Canvas 时钟时。我按照说明进行了整个演示,但无法在自己的浏览器(Safari 8.0.7 和 FireFox 39.0.3)上查看时钟,它显示
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceS
我是 android/java 编程新手,遇到错误,提示无法解析符号getContext,我正在尝试从我的应用程序获取图片以保存到手机主要外部存储上的照片库。如果有人可以帮助我解决这个错误,我将非常感
我是 android/java 编程新手,并且遇到错误,提示符号 getContext 无法解析。该系统以Activity启动,有两个fragment。第一个是显示 Rest Api 的按钮。请帮忙
typedef struct _ut_slot { ucontext_t uc; .... }*ut_slot; static ut_slot* table; //array of t
我有扩展 recyclerview.adapter 的适配器类,我需要在此类中使用以下代码,但它在“this”上有错误。 public void addItems(int howMany){
我正在使用常规 JS(我知道这不是最好的,但我是初学者) 所以我正在为 Canvas 项目编写代码。然而,当使用 getContext() 函数时,JS 控制台会显示 Uncaught TypeErr
我知道使用上述 API 对于普通的基于 x86 的桌面系统是安全的,但对于使用 ARM 或 MIP 的嵌入式系统,某些不常用的 API 可能会得到较少的支持或错误的实现。在一个程序中包含这样的高级 A
所以我一直在官方网站上接受 Android 开发人员培训,他们希望我们最终实例化我们的数据库。 所以他们告诉我们使用这段代码: FeedReaderDbHelper mDbHelper = new F
在我的 Android 应用程序中,我正在使用标准的 Android 登录模板构建登录屏幕。在此代码模板中, Activity 中有一个名为 UserLoginTask 的类。如果用户成功登录,我想将
我正在使用 Canvas 制作一个基本的 Web 应用程序,它会在窗口调整大小时动态更改 Canvas 大小。我已经让它静态地工作,没有任何缺陷,但是当我创建一个对象使其动态地工作时,它会抛出一个错误
在 AndroidX 中, InstrumentationRegistry 现在已被弃用。 documentation状态 This method is deprecated. In most sce
我正在尝试在Spring Boot应用程序中使用Spring Security添加Facebook授权。目前,我的问题是从Principal提取数据。 这是我的安全配置: public class S
我正在尝试获取 Canvas 的上下文,显然我收到错误Uncaught TypeError: Cannot call method 'getContext' of null 显然我在它初始化之前就得到
我是Kotlin Coroutines的新手,我想以异步方式为我的每位员工调用API。但是我遇到了一个问题,即新协程的存在,我无法从SecurityContextHolder.getContext检索
最近我将 struts2 版本从 2.0.11 更新到了当前的 2.2.3。不幸的是,我现在遇到了一些奇怪的问题,到目前为止我还无法解决。 当我尝试获取 ActionContext 时: Action
我想要一个 ActorFactory 类,如下所示 public class SampleActorFactory { // Simple create method public creat
我尝试对用户进行身份验证(它有效)并从上下文中获取用户 token ,但它不起作用。 我有一个简单的微服务应用程序作为我的宠物项目,并使用 WebFlux 作为网络框架。我尝试调试 ReactiveS
我是一名优秀的程序员,十分优秀!