Почему Spring Security всегда выдает ошибку 403?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему Spring Security всегда выдает ошибку 403?

Сообщение Anonymous »

Я пытаюсь создать проект с использованием Spring Security и видел онлайн-руководство и документацию, но при тестировании с помощью почтальона он всегда выдает ошибку 403, есть идеи, как это исправить?
вот моя конфигурация безопасности >

Код: Выделить всё

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())  // Disable CSRF for testing
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/auth/register", "/api/auth/login", "/api/test/public").permitAll()  // Allow public access to register and login
.anyRequest().authenticated()  // Any other request requires authentication
)
.formLogin(form -> form.disable())  // Disable the default form login page
;  // Enable basic HTTP authentication for testing

return http.build();
}
а вот мой тестовый контроллер

Код: Выделить всё

package com.example.demo.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/test")
public class TestController {

@GetMapping("/public")
public ResponseEntity publicEndpoint() {
return ResponseEntity.ok("This is a public endpoint!");
}
}
вот мой контроллер регистрации и входа в систему

Код: Выделить всё

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequestMapping("/api/auth")
public class AuthController {

private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;

public AuthController(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}

@PostMapping("/register")
public ResponseEntity registerUser(@RequestBody User user) {
if (userRepository.findByUsername(user.getUsername()).isPresent()) {
return ResponseEntity.badRequest().body("Username is already taken!");
}
user.setPassword(passwordEncoder.encode(user.getPassword()));
userRepository.save(user);
return ResponseEntity.ok("User registered successfully!");
}

@PostMapping("/login")
public ResponseEntity loginUser(@RequestBody User user) {
Optional existingUser = userRepository.findByUsername(user.getUsername());

if (existingUser.isEmpty()) {
return ResponseEntity.badRequest().body("Invalid username or password!");
}

// Check if password matches
boolean passwordMatches = passwordEncoder.matches(user.getPassword(), existingUser.get().getPassword());

if (!passwordMatches) {
return ResponseEntity.badRequest().body("Invalid username or password!");
}

return ResponseEntity.ok("Login successful!");
}
}
вот свойства моего приложения

Код: Выделить всё

spring.application.name=demo
# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

#Security
spring.security.user.name=admin
spring.security.user.password=admin
spring.security.user.roles=USER

logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.web=DEBUG
кто-нибудь может мне помочь? я видел решение в Интернете, но оно тоже не сработало.
Я пытаюсь получить доступ к своей конечной точке, но сервер всегда выдает запрещенное сообщение.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -forbidden
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»