我的用户使用Amazon Cognito通过this plugin登录我的应用。
我也有一个Spring Boot 应用程序用户界面,也由cognito保护。
在我的应用程序流程中的某个点上,我想显示Sping Boot 应用程序的Web视图,让用户配置其他东西。
如何在不让用户再次登录的情况下执行此操作?
如果我创建了一个名为/login/{username}/{password}的端点,使用SecurityContextHolder登录用户并重定向到/home,这是否是一个糟糕的做法?
我的用户使用Amazon Cognito通过this plugin登录我的应用。
我也有一个Spring Boot 应用程序用户界面,也由cognito保护。
在我的应用程序流程中的某个点上,我想显示Sping Boot 应用程序的Web视图,让用户配置其他东西。
如何在不让用户再次登录的情况下执行此操作?
如果我创建了一个名为/login/{username}/{password}的端点,使用SecurityContextHolder登录用户并重定向到/home,这是否是一个糟糕的做法?
1条答案
按热度按时间brc7rcf01#
我终于修好了。
首先,我登录,并使用调试器使代码停止在某个地方,以便查找SecurityContextHolder.getContext().getAuthentication()。我的Authentication对象的类型为OAuth2AuthenticationToken。我仔细查看了它,并决定复制它。我在自定义AuthenticationManager中这样做,并在覆盖的authenticationmethod中返回我的OAuth2AuthenticationToken。
CustomAuthenticationManager.java
我也把它放在一个静态的www.example.com中Tools.java
然后我创建了两个端点。一个是我的“登录页面”,另一个是我的过滤器要去的。所以在我的登录页面中,我接受一个访问令牌,将它存储在会话中,然后重定向到我的另一个通过过滤器的端点。
TokenLoginController.java
筛选器扩展AbstractAuthenticationProcessingFilter,从会话中查找访问令牌,创建OAuth2AuthenticationToken,并使用它进行身份验证。
StickyAuthenticationFilter.java
最后,我的SecurityConfig像这样将它们联系在一起: