如何在运行时注册WebSecurityConfigs?

时间:2019-04-15 17:09:01

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

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

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

我不能仅添加一个页面,用户在该页面上选择要重定向到相应登录页面的组织,因为我不想向除管理员之外的任何用户提供有关组织实际使用该应用程序的信息。

我尝试阅读StackOverflow并发现this question。它没有回答我的问题,因为它似乎是仅由身份验证引起的。

我考虑过通过添加多个WebSecurityConfigurations(使用@Order)来解决该问题,由于我不知道将添加多少组织(和哪个组织),该解决方案最终无法解决任何问题。

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

所以我的下一个希望是向我的应用程序添加一个工厂,该工厂仅在运行时为每个新注册的组织添加另一个WebSecurityConfig。我没有找到任何办法实现这一目标。 那么,有什么方法可以在我错过的运行时期间注册新的WebSecurityConfigurations吗?还是在将HTTP请求重定向到登录页面后,可以在其中获取有关HTTP请求的信息的地方?我愿意接受任何解决方案或暗示我的问题。

1 个答案:

答案 0 :(得分:0)

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

相关问题