Spring Security не даёт подгрузиться js
Раньше я не работал со Spring Security, поэтому я новичок здесь
У меня есть страница которая подгружает js, я выставил доступ для всех к пакету с js, но он все равно не пропускает
Отправив запросы с помощью postman на адреса, я понял, что при взаимодействии с js мне прилетает страница логина
@Configuration
public class MvcConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/welcome").setViewName("welcome");
registry.addViewController("/").setViewName("welcome");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/admin").setViewName("admin");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/registration").setViewName("registration");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/"); // указывает на путь к директории со статическими ресурсами
}
}
Это файл конфигурации Spring Security
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/", "/welcome", "/registration", "/admin", "/resources/**", "/add", "/listOfUsers" ).permitAll()
.anyRequest().authenticated()
)
.formLogin((form) -> form
.loginPage("/login")
.permitAll()
)
.logout((logout) -> logout.permitAll());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
return new MyUserDetailsService();
}
@Bean
public AuthenticationProvider authenticationProvider(){
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsService());
provider.setPasswordEncoder(passwordEncoder());
return provider;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Файл контроллера
@RestController
public class BackendController {
@Autowired
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
// Обработка POST запроса и сохранение объекта User в БД
@PostMapping("/add")
public void processFormData(@RequestBody String jsonUser) throws JsonProcessingException {
User user = jsonStringToUser(jsonUser); // Получаю объект User из json
user.setPassword(passwordEncoder.encode(user.getPassword()));
System.out.println(user);
userRepository.save(user);
}
// Отправка списка объектов User на фронт в json формате
@GetMapping("/listOfUsers")
public String listOfUsers() throws JsonProcessingException {
List<User> users = userRepository.findAll();
return usersToJson(users); // Возвращаю список объектов User в виде json
}
// Преобразование json в объект User
private User jsonStringToUser(String jsonUser) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(jsonUser, User.class);
return user;
}
// Преобразование списка объектов User в json
private String usersToJson(List<User> users) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonUsers = objectMapper.writeValueAsString(users);
return jsonUsers;
}
}
JS файл
// Функция обработки и отправки POST запроса в бэк
function submitForm() {
// Считываемые поля
var firstName = document.getElementById("firstName").value;
var secondName = document.getElementById("secondName").value;
var phoneNumber = document.getElementById("phoneNumber").value;
var email = document.getElementById("email").value;
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var role;
if (document.getElementById('role_student').checked) {
role = document.getElementById('role_student').value;
}
else{
role = document.getElementById('role_teacher').value;
}
// Отправка данных в бэк
fetch('/add', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
// Формирование json для отправки
body: JSON.stringify({firstName: firstName, secondName: secondName, phoneNumber: phoneNumber,
email: email, username: username, password: password, role: role})
})
.then(response => response.json())
.then(data => {
// Получение ответа от бэка
console.log(data);
})
.catch(error => {
console.error('Error:', error);
});
}
// Функция для получения всех записей из таблицы user (для отладки), в дальнейшем скорее всего уберу
// Сделал её асинхронной для того, чтобы методы fetch() и .json() успели закончить свой жизненный цикл
async function getListOfUsers(){
let response = await fetch("/listOfUsers");
let users = await response.json();
let list = document.querySelector('.listOfUsers');
// Формирую новую строку для выводы записи в таблицу
for(key in users){
list.innerHTML += `
<tr>
<th>${users[key].firstName}</th>
<th>${users[key].secondName}</th>
<th>${users[key].phoneNumber}</th>
<th>${users[key].email}</th>
<th>${users[key].username}</th>
<th>${users[key].password}</th>
<th>${users[key].role}</th>
</tr>
`;
}
}
getListOfUsers();
если я отправляю запрос с помощью postman на адреса REST-контроллера, то все нормально работает, но если открывать страницу через браузер, то js просто выдает статус 302 и не подгружается