我们正在从基于LDAP的身份验证转向SSO(Oracle的WebGate)。
目前,对于基于LDAP的我们在UsernamePasswordAuthenticationFilter
位置使用基于表单的身份验证(FORM_LOGIN_FILTER
)。
对于SSO用户将进行预先验证,并且将发送带有其用户名的请求标头。我打算在RequestHeaderAuthenticationFilter
位置使用PRE_AUTH_FILTER
。
问题是我们需要让这两个过滤器同时存在,并且能够根据属性文件中的值在它们之间切换。这适用于SSO在生产时无法正常工作的情况,因此我们可以轻松回退到LDAP。
我的问题是如何正确实现这一点。如果两个具有这些位置的过滤器同时出现,会有任何副作用吗?扩展这些过滤器并在继承类中添加属性检查是否更好?或者更好地创建将处理它们之间切换的复合过滤器?
答案 0 :(得分:1)
由于表单登录过滤器仅处理特定位置(例如/ j_spring_security_check)的请求,因此不应影响其他过滤器的功能。因此,您所说的原始问题相当容易。您应该问的更重要的问题是如何处理未经身份验证的请求。您需要决定在新的SSO解决方案中如何工作,看看您是否可以构建一些可用于切换回应用程序中显示登录表单的内容(并且您需要设计如何做出决定 - 例如标志在属性文件或运行时决策中)。如果您正在考虑可以在短时间内实施的后备,但不介意重新启动应用程序,那么我会建议使用Spring配置文件。