如何在 Spring Security 中动态切换应用程序上下文?

Posted

技术标签:

【中文标题】如何在 Spring Security 中动态切换应用程序上下文?【英文标题】:How to dynamically switch application context in Spring Security? 【发布时间】:2018-03-07 10:19:50 【问题描述】:

我在我的 Web 应用程序中使用 Spring 安全性,并且为此使用 Javaconfig。最近我们还在应用程序中添加了 Spring SAML 身份验证,经过一些障碍终于让它工作了。在WebApplicationInitializeronStartUp() 内部,我正在基于一些前提条件加载SpringSecurity 配置或SpringSaml 配置。

现在我该如何动态地做到这一点?实际上我会介绍一个按钮,一旦管理员点击这个按钮,所有用户都将被注销,并且应该重新加载上下文。此时如果系统在一段时间内无法访问并重新初始化应用程序上下文(这实际上是我的目标)就可以了吗?

换句话说,我如何调用WebApplicationInitializeronStartUp() 方法?

【问题讨论】:

我认为可以在不重新加载spring应用上下文的情况下完成。即使您的上下文被刷新,您也可能面临其他副作用。 This question 提供了从控制器刷新应用程序上下文的方法,但最终出现了不同的问题。如果您可以分享一些配置代码,这将有助于提供更好的答案。 【参考方案1】:

您使用 Spring Environment Profiles 来控制加载哪些安全配置。

要切换配置文件,然后更新列出活动配置文件的配置文件,并重新加载应用程序。

见Spring Boot Reference Guide - 25. Profiles。

【讨论】:

感谢安德烈亚斯的回答。您能否分享如何以编程方式“重新加载应用程序”。 ? @aProgrammer 如果你使用spring-boot-devtools,更新配置文件会自动触发LiveReload:见Spring Boot Reference Guide - 83. Hot swapping。

以上是关于如何在 Spring Security 中动态切换应用程序上下文?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中动态指定 OAuth2 资源详细信息?

如何在 Spring Security 中动态决定 <intercept-url> 访问属性值?

在 Spring Security 3 中动态创建新角色和权限

使用 Spring Security 在运行时切换身份验证方法?

如何使用 spring-security 和 jQuery 处理过期会话?

spring security动态管理资源结合自定义登录页面