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

SpringBoot登录API凭证正确却返回403且跳转至/error页面的问题求助

SpringBoot登录API凭证正确却返回403且跳转至/error页面的问题求助

大家好,我遇到了一个棘手的问题:当尝试POST调用登录API时,请求被自动路由到了/error路径,并且返回403禁止访问。下面是相关的调试日志、控制器代码和安全配置,恳请各位帮忙排查问题所在!

调试日志

2025-02-20T09:34:07.325+05:30 DEBUG 18944 --- [artistapp] [nio-8081-exec-2] o.s.security.web.FilterChainProxy        : Securing POST /error
2025-02-20T09:34:07.336+05:30 DEBUG 18944 --- [artistapp] [nio-8081-exec-2] o.s.s.w.a.AnonymousAuthenticationFilter  : Set SecurityContextHolder to anonymous SecurityContext
2025-02-20T09:34:07.342+05:30 DEBUG 18944 --- [artistapp] [nio-8081-exec-2] o.s.s.w.a.Http403ForbiddenEntryPoint     : Pre-authenticated entry point called. Rejecting access

控制器代码

package com.ht_digital.artistapp.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.ht_digital.artistapp.model.User;
import com.ht_digital.artistapp.service.UserService;
import org.springframework.http.HttpStatus;
import com.ht_digital.artistapp.config.JwtUtil;
import com.ht_digital.artistapp.model.User;
import com.ht_digital.artistapp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;

@RestController
@RequestMapping("/api/auth")
@CrossOrigin(origins = "http://localhost:3000")
public class AuthController {

@Autowired
private UserService userService;

@Autowired
private JwtUtil jwtUtil;

private final AuthenticationManager authenticationManager;

public AuthController(AuthenticationManager authenticationManager) {
    this.authenticationManager = authenticationManager;
}

@PostMapping("/signup")
public ResponseEntity<?> signup(@RequestBody User user) {
    try {
        User newUser = userService.registerUser(user);
        if (newUser == null) {
            return ResponseEntity.ok("Email already exists. Please login.");
        }
        return ResponseEntity.ok("User registered successfully.");
    } catch (Exception e) {
        return ResponseEntity.badRequest().body("An error occurred: " + e.getMessage());
    }
}

@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody User user) {
    Authentication authentication = authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(user.getEmail(), user.getPassword()));

    UserDetails userDetails = (UserDetails) authentication.getPrincipal();
    String token = jwtUtil.generateToken(userDetails.getUsername());

    return ResponseEntity.ok(token);
}

}

安全配置代码

package com.ht_digital.artistapp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;

import org.springframework.security.authentication.AuthenticationManager;

import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

import static org.springframework.security.config.Customizer.withDefaults;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

private final JwtAuthenticationFilter jwtAuthenticationFilter;

public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter) {
    this.jwtAuthenticationFilter = jwtAuthenticationFilter;
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .csrf(csrf -> csrf.disable())
            .cors(withDefaults())
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/api/auth/signup", "/api/auth/login").permitAll()
                    .anyRequest().authenticated()
            ).addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);

    return http.build();
}

@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
    return authenticationConfiguration.getAuthenticationManager();
}
}

备注:内容来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:54:32