如何在 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 身份验证,经过一些障碍终于让它工作了。在WebApplicationInitializer
的onStartUp
() 内部,我正在基于一些前提条件加载SpringSecurity 配置或SpringSaml 配置。
现在我该如何动态地做到这一点?实际上我会介绍一个按钮,一旦管理员点击这个按钮,所有用户都将被注销,并且应该重新加载上下文。此时如果系统在一段时间内无法访问并重新初始化应用程序上下文(这实际上是我的目标)就可以了吗?
换句话说,我如何调用WebApplicationInitializer
的onStartUp()
方法?
【问题讨论】:
我认为可以在不重新加载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 在运行时切换身份验证方法?