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
相关产品推荐
相关产品推荐

