Spring Boot注册API异常排查:HTTPS转HTTP后仍报401
问题排查:Spring Boot注册API与React前端的注册失败问题
我开发了一个Spring Boot注册API,本地运行无报错,但React项目的注册页面无法完成用户注册。用Postman调用时出现HTTP请求解析错误,错误日志如下:
Invalid character found in method name [0x160x030x010x000xf70x010x000x000xf30x030x030x0e0xbca0x910x010xf8.0xc40x840xbecS<0xb5w`"0xf1M0xbe0xa10xcd0xf830xf3y0x8a0x110xc80xf80xca6 ]. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
...(省略重复栈信息)
我已确认请求使用POST方法且无特殊字符,将请求协议从HTTPS改为HTTP后,Postman返回401错误,但React端仍无法完成注册。给API添加try-catch块后问题依旧,请求协助排查原因。
初始API代码
@PostMapping("/register") public ResponseEntity<String> register(@RequestBody RegisterRequest registerRequest){ if (userRepository.findByEmail(registerRequest.getEmail())!=null){ return new ResponseEntity<>("Email already exist",HttpStatus.BAD_REQUEST); } User user = new User(); user.setEmail(registerRequest.getEmail()); user.setName(registerRequest.getName()); user.setLastName(registerRequest.getLastName()); user.setPassword(passwordEncoder.encode(registerRequest.getPassword())); userRepository.save(user); authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(registerRequest.getEmail(), registerRequest.getPassword()) ); return new ResponseEntity<>(jwtUtil.generateToken( registerRequest.getEmail(), userRepository.findByEmail(registerRequest.getEmail()).getId(), registerRequest.getName() +" "+registerRequest.getLastName() ) ,HttpStatus.OK ); }
添加try-catch后的代码
@PostMapping("/register") public ResponseEntity<String> register(@RequestBody RegisterRequest registerRequest) { try { if (userRepository.findByEmail(registerRequest.getEmail()) != null) { return new ResponseEntity<>("Email already exists", HttpStatus.BAD_REQUEST); } User user = new User(); user.setEmail(registerRequest.getEmail()); user.setName(registerRequest.getName()); user.setLastName(registerRequest.getLastName()); user.setPassword(passwordEncoder.encode(registerRequest.getPassword())); userRepository.save(user); // Attempt authentication after user registration authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(registerRequest.getEmail(), registerRequest.getPassword()) ); // Generate JWT token String token = jwtUtil.generateToken( registerRequest.getEmail(), user.getId(), registerRequest.getName() + " " + registerRequest.getLastName() ); return new ResponseEntity<>(token, HttpStatus.OK); } catch (Exception e) { // Log the exception or handle it as needed e.printStackTrace(); // You can replace this with your logging mechanism return new ResponseEntity<>("Failed to register user", HttpStatus.INTERNAL_SERVER_ERROR); } }
内容的提问来源于stack exchange,提问作者Prabhav Goel
相关产品推荐
相关产品推荐

