拦截 Spring CAS 登录以进行额外的验证步骤

Intercept Spring CAS Login for extra validation step

我正在尝试执行额外的验证步骤 Spring + CAS 已经能够成功验证凭据。

在我工作的系统中,不仅用户被认为是活跃的或不活跃的,而且还有访问应用程序服务的订阅。我正在尝试检测没有​​有效订阅的用户,然后验证失败并将用户发送回登录屏幕,并显示一条解释错误性质的消息。

我正在尝试各种方法来实现这一目标。我能够获取有关使用和实施 Spring UserDetailsS​​ervice 的订阅的所有信息。从那里我可以确定给定用户是否有有效订阅。

我遇到困难的部分是在这种情况下尝试使登录流程失败。

UserDetailsS​​ervice 可以抛出 UsernameNotFoundException,但我还没有找到在应用程序中处理这些异常的优雅方法。

我尝试最多的方法是创建自定义 AuthenticationSuccessHandler。关键是此时 CAS 已经对用户进行了身份验证。我尝试将 Authentication 对象的 setAuthenticated 方法设置为 false 以尝试使身份验证无效。我也试过重定向到注销。由于 CAS 是一项集中式服务,因此获得正确的重定向 URL 被证明是一件非常痛苦的事情。

我想知道是否有任何人在 Spring 安全方面拥有更多专业知识,或许可以建议一种更好的方法来在登录时添加额外的验证步骤。

由于身份验证是由您的 CAS 服务器执行的,为什么不在 CAS 中创建一个自定义身份验证处理程序来检查用户是否具有有效订阅以及验证用户凭据?