我有一个 Spring Boot 后端,它使用 spring-boot-starter-oauth2-client 来为我的网站建立一个 google oauth2 登录系统。这是 SecurityFilterChain,当用户使用 go 登录时...
我有一个 Spring Boot 后端,它使用 spring-boot-starter-oauth2-client 来为我的网站建立 google oauth2 登录系统。
这是 SecurityFilterChain,当用户使用 Google 登录时,它会将用户添加到我的数据库中。GoogleOAuth2 用户是我创建的自定义 OAuth2User,可以更轻松地公开 \'email\' 等属性。
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/oauth/**").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(oauth2Login -> oauth2Login
.userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint
.userService(googleOAuth2UserService)
)
.successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
GoogleOAuth2User googleOAuth2User = (GoogleOAuth2User) authentication.getPrincipal();
userService.processOAuthPostLogin(googleOAuth2User);
response.sendRedirect("http://localhost:3000");
}
})
);
return http.build();
}
然后我有一个端点,我的经过身份验证的客户端会调用该端点来检查它是否已登录
@GetMapping(path = "/authenticated")
public User getAuthenticatedUser(@AuthenticationPrincipal GoogleOAuth2User principal) {
return userService.getAuthenticatedUser(principal);
}
在前端,我有一个按钮可以转到 google oauth2 页面。
<div>
With Google: <a href="http://localhost:8080/oauth2/authorization/google">click here</a>
</div>
但是,我在这里遇到的问题是客户端仅在当前浏览器会话中进行身份验证。当我关闭浏览器并重新打开它时,客户端再次退出并且未进行身份验证。如何持久化会话,以便我的用户在浏览器关闭后仍然处于“登录”状态?