You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法设置Cookie求助:后端登录设置Cookie前端未显示

无法设置RefreshToken Cookie排查请求

后端处理登录请求时生成refreshToken并通过ResponseCookie写入响应,但前端浏览器的Applications/Cookies中看不到该Cookie。以下是相关代码和配置:

1. Cookie设置代码

ResponseCookie cookie = ResponseCookie.from("refreshToken", refreshToken)
                .httpOnly(true)
                .secure(false)
                .path("/")
                .maxAge(7 * 24 * 60 * 60)
                .sameSite("Strict")
                .build();

        response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());

2. CorsFilter配置代码

@Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("http://localhost:3030");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }

3. 登录接口Controller代码

@Operation(summary = "Đăng nhập", description = "API để đăng nhập")
    @PostMapping("/login")
    public ApiResponse<LoginRespone> login(
            @Valid
            @RequestBody LoginRequest request,
            HttpServletResponse response
    ){
        return ApiResponse.<LoginRespone>builder()
                .result(authService.login(request, response))
                .build();
    }

4. 登录Service核心代码

public LoginRespone login(LoginRequest request, HttpServletResponse response){

        User user = userRepository.findByEmail(request.getEmail())
                .orElseThrow(() -> new AppException(ErrorCode.NOT_EXISTED));

        if (user.getIsActive() == Status.PENDING){
            userRepository.log_auth("login", user.getUserId(), user.getEmail(), "Fail", "Unverified account");
            throw new AppException(ErrorCode.UNVERIFIED_ACCOUNT);
        }

        if (user.getIsActive() == Status.BANNED){
            userRepository.log_auth("login", user.getUserId(), user.getEmail(), "Fail", "Forbidden account");
            throw new AppException(ErrorCode.FORBIDDEN_ACCOUNT);
        }

        boolean authenticated = passwordEncoder.matches(
                request.getPassword(),
                user.getPassword()
        );

        if (!authenticated) {
            userRepository.log_auth("login", user.getUserId(), user.getEmail(), "Fail", "Wrong password");
            throw new AppException(ErrorCode.UNAUTHENTICATED);
        }

        var accessToken = jwtService.generateAccessToken(user);
        var refreshToken = jwtService.generateRefreshToken(user);

        var storedToken = Token.builder()
                .token(refreshToken)
                .tokenType(TokenType.BEARER)
                .userId(user.getUserId())
                .build();
        tokenRepository.save(storedToken);

        ResponseCookie cookie = ResponseCookie.from("refreshToken", refreshToken)
                .httpOnly(true)
                .secure(false)
                .path("/")
                .maxAge(7 * 24 * 60 * 60)
                .sameSite("Lax")
                .build();

        response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());

        userRepository.log_auth("login", user.getUserId(), user.getEmail(), "Success", "Login successfully");

        return LoginRespone.builder()
                .accessToken(accessToken)
                .refreshToken(refreshToken)
                .userResponse(userMapper.toUserResponse(user))
                .build();
    }

同时附上前端请求截图、CorsFilter配置截图,恳请帮忙排查该Cookie无法在前端显示的问题。


内容的提问来源于stack exchange,提问作者TunazZz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:12:39