вот моя конфигурация безопасности >
Код: Выделить всё
@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
Мобильная версия