在受Apereo CAS 5.3.8保护的应用程序中,我们需要在登录后显示一个屏幕,该屏幕显示带有一些值的下拉列表,用户必须从中选择一个选项。仅在满足某些条件(取决于某些用户属性)时才需要显示该屏幕。在某些情况下,我们需要的所有属性都在登录后加载,但在其他情况下,我们需要根据用户的选择加载其他属性。然后,必须将用户选择转换为我们要存储在CAS断言中的其他一些用户属性,以便客户端应用程序可以访问用户属性并基于这些属性做出决策。
为了显示此附加屏幕,我们创建了一个自定义多因素提供程序。加载的属性将传递到PrincipalFactory
实现。
除了用户下拉列表选择之后发生的部分以外,几乎所有内容都可以正常运行。问题是如何分两步加载主体属性?我尝试在我的自定义操作中更新principal
和authentication
对象,该操作在用户选择后触发,但不起作用,它始终保持旧的主体,并在登录后立即加载属性。
我认为问题可能是由于将属性传递给PrincipalFactory
造成的,并且它们可能只被写入了一次并且变得不可变。我尝试使用AuthenticationTransactionManager
和AuthenticationResultBuilder
,但无法添加额外的计算属性。
任何指导将不胜感激。