我的问题主要是围绕是否可以在春季应用程序中具有两个单独的身份验证源的登录表格,并具有单独的身份验证源。
我想在我的maven构建中添加不同的安全配置类(或带有静态内置配置类的同一类(,具体取决于选择哪个配置文件: uat 或 Production 。或使用部署环境控制此操作(请参见下面关于帧(。
在> case 该应用程序应具有自己的身份验证提示(例如Admin Pages(,我想查看该应用程序的登录页面。
但是,在 uat 配置文件的情况下,我想在任何用户可以查看任何页面之前查看额外的登录页面,以及如果这些受保护页面的登录页面以及管理功能的登录页面被访问。
这个想法是在 uat 中显示该应用程序,就像它在 production 中的操作一样,但不允许任何用户看到任何页面而无需先验证单独登录的任何页面形式。
我愿意研究任何的想法,但是我的理想情况将允许使用独特的弹簧安全配置集。
我尝试/考虑的
动态过滤器我通过注册一个抓住任何请求并转发给servlet的动态过滤器来实现这个想法有些运气,其唯一目的是处理显示不同的登录页面并处理外部身份验证(所有内容都包含在构建时间中的JAR中对于UAT(,但这不是一个春季应用程序,我相信调度servlet会否定这种方法。
帧(应用程序(我已经考虑过在外部" UAT查看器"应用程序框架内显示该应用程序的想法,该应用程序具有其自身的安全性,从理论上讲,从理论上讲了弹簧安全问题。但是我不知道这是否会为外部和内部应用程序创建不同的cookie(出于安全原因我很少考虑帧(。理想情况下,我想否认X框架选项标题中的所有框架以帮助防止点击绑架,但是如果这种方法是可能的,我将很高兴只能将框架策略更改为相同的ORIGIN。
我想我将首先尝试框架方法并进行报告。
通过这件事,将在框架中展示的内部应用程序仍必须访问外部世界,以便客户可以加载它它的代码。
解决方案正在对单独的项目(Maven中的" UAT"配置文件(添加一个依赖性,该项目提供了一个可以中断和处理弹簧正常流动外的验证的滤镜和servlet安全。
这种方法的问题是,如果页面需要身份验证,则Spring Security的过滤器将首先截获请求,并尝试重定向到指定的登录页面(或默认(。解决此问题的方法是添加一条禁用弹簧安全性的路径,因此请求将绕过这些过滤器,并由自定义添加的过滤器进行处理:
@Override
public void configure(WebSecurity web) throws Exception {
// Disabling security for the login-aspect addon. Will emit 404 in
// production operation where login-aspect.jar is no added.
web.ignoring().antMatchers("/uat-login");
}
以这种方式,我可以使用一个将任何请求重定向到该应用程序的过滤器首先映射到'/uat-login'并显示身份验证提示。
对此的额外好处(IMO(是,如果触发了应用程序的注销功能并删除了会话cookie,则它也有效地登录了外部安全性。
这可能不是最佳方法,但它起作用当然,欢迎提出改进的建议。我想我会在以后的GitHub项目中发布用于执行此操作的代码。