java - 如何在运行时注册 WebSecurityConfigs?

标签 java spring spring-boot spring-mvc spring-security

我正在为我的学习构建一个网络应用程序。该应用程序将由单个管理员管理,该管理员可以注册组织,以便其员工可以使用它。

我已经有一个有效的 WebSecurityConfiguration,它将每个未经身份验证的用户重定向到位于“/login”的表单登录页面。现在我需要在“{organization}/login”这样的路径下为每个组织提供自己的登录链接,因为我的教授要求这样做。为此,我还没有找到解决方案。

我不能只添加一个页面,用户可以在其中选择他们的组织以将其重定向到相应的登录页面,因为我不想向管理员以外的任何用户提供有关哪些组织实际使用该应用程序的信息。

我尝试阅读 StackOverflow 并找到了 this question .它没有回答我的问题,因为它似乎只是由身份验证引起的。

我考虑通过添加多个 WebSecurityConfigurations(通过使用 @Order)来解决问题,但最终没有解决任何问题,因为我不知道将添加多少(以及哪些)组织。

我尝试使用自定义 Controller 来处理“/login”,并让 Spring 将 HttpServletRequest 注入(inject)到适当的方法中(用 @GetMapping("/login") 注释,希望找到被重定向保存在某个地方的原始 HTTP 请求它。好像我错过了它,或者它不在那里。

所以我的下一个希望是在我的应用程序中添加一个工厂,它只是在运行时为每个新注册的组织添加另一个 WebSecurityConfig。我没有找到任何方法来实现这一点。 那么有什么方法可以在我错过的运行时注册新的 WebSecurityConfigurations 吗?或者有什么地方可以在重定向到登录页面后获取有关 HTTP 请求的信息?对于我的问题的任何解决方案或提示,我都持开放态度。

最佳答案

似乎我没有正确调试 session 属性。 Spring Security 将请求保存在 session 中(可通过键“SPRING_SECURITY_SAVED_REQUEST”访问)。好像我只是直接访问“/login”,因此没有被重定向。如果不需要重定向用户,则显然不会设置该属性。

关于java - 如何在运行时注册 WebSecurityConfigs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694183/

相关文章:

java - jhipster应用程序运行失败: Unsupported major.次要版本52.0

java - 带有 @Transactional 的 EntityManager persist() 不会抛出 DataIntegrityViolationException

java - 通过接口(interface)注入(inject)服务类?

java - 在 Java 中连接到 FTP 端口 990 时为 "Connection refused"

java - Apache Shiro 配置问题的 Web 应用程序安全性

java - Spring - 来自另一个项目或 jar 的 wire 组件

java - Spring 验证 JSR-303 @NotNull 抛出 NotReadablePropertyException

spring-boot - JWToken 无效 : kid is a required JOSE Header

java - 如何将我的表单与操作链接起来?

java - 在 IDEA 中解决工作区项目的依赖关系