我的问题主要围绕是否有可能在 Spring 应用程序中向同一用户提供两个具有不同身份验证来源的登录表单。
我想根据选择的配置文件将不同的安全配置类(或具有静态内部配置类的同一类)添加到我的 Maven 构建中:UAT或Production。或者使用部署环境来控制它(参见下面的框架)。
在任何一种情况下,应用程序都应该有自己的“特权”访问(如管理页面)的身份验证提示,我希望看到应用程序的登录页面。
但是,在UAT配置文件的情况下,我希望在任何用户可以查看任何页面之前看到一个额外的登录页面,如果访问这些受保护的页面,我希望看到用于管理功能的登录页面。
这个想法是在UAT中显示应用程序,就像它在生产中运行一样,但不允许任何用户在没有首先使用单独的登录表单进行身份验证的情况下查看任何页面。
我愿意研究任何想法,但我理想的情况是允许使用不同的 Spring Security 配置集。
我尝试过/考虑过的
动态过滤器 通过注册一个动态过滤器来实现这个想法,我很幸运地实现了这个想法,该过滤器捕获了任何请求并转发到一个 servlet,其唯一目的是处理显示不同的登录页面和处理外部身份验证(全部打包在一个包含在UAT 的构建时间),但这不是 Spring 应用程序,我相信调度 servlet 会否定这种方法。
Frame (app-ception) 我考虑过在具有自己的安全性的外部“UAT Viewer”应用程序的框架内显示应用程序的想法,理论上可以分割 Spring Security 问题。但我不知道这是否会为外部和内部应用程序创建不同的 cookie(出于安全原因,我很少考虑框架)。理想情况下,我想拒绝 x-frame-options 标头中的所有框架以帮助防止点击劫持,但如果这种方法可行,我只需将框架策略更改为同源即可。
我想我会先尝试框架方法并报告回来。
考虑到这一点,将在框架中呈现的内部应用程序仍然必须可供外部世界访问,以便客户端可以加载它,因此这种方法违背了隔离内部应用程序而对其代码影响最小的目的。