уже тильт. У меня есть приложение spring mvc. У него есть метод get, который возвращает страницу «staff_profile_for_user». С этой страницы я отправляю метод post, который должен прийти к соответствующему методу в контроллере. По непонятным причинам туда он не приходит У меня включен csrf в приложении. Я пытался передать токен двумя способами. В обоих случаях токен вставляется в форму. Я хотел бы отметить, что когда я включаю настройку csrf.disable() в цепочке фильтров, все начинает работать. В других post методах все работает. Что еще я могу попробовать сделать? В чем может быть проблема? Ниже прикрепляю фрагменты кода.
staff_profile_for_user.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" lang="en">
<head>
<meta charset="UTF-8">
<title>Profile</title>
</head>
<body>
<div th:object="${staff}">
<img width="200" height="200" th:src="${'/api/staff/staff_image/' + id}">
<p th:text="*{'Email: ' + email}"></p>
<p th:text="*{'Name: ' + name}"></p>
<p th:text="*{'Surname: ' + surname}"></p>
<p th:text="*{'Position: ' + position}"></p>
<p th:text="*{'Department: ' + department}"></p>
</div>
<form th:action="@{/api/staff/{id}(id=${staff.id})}" method="post">
<!-- <input-->
<!-- type="hidden"-->
<!-- th:name="${_csrf.parameterName}"-->
<!-- th:value="${_csrf.token}" />-->
<button type="submit">Make an appointment</button>
</form>
</body>
</html>
методы get и post (post без логики)
@GetMapping("/{id}")
public String getAllInfo(@PathVariable String id, Model model) {
StaffDto staffDto = webClient.get()
.uri("/server/staff/"+id)
.retrieve()
.bodyToMono(StaffDto.class)
.block();
model.addAttribute("staff", staffDto);
return "staff_profile_for_user";
}
@PostMapping("/{id}")
public String makeAppointment(@PathVariable String id) {
System.out.println(id);
return "redirect:/api/auth/main";
}
Конфигурация безопасности
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
private final JwtFilter jwtFilter;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.httpBasic().disable()
//.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeHttpRequests(
authz -> authz
.requestMatchers("/login", "/registration").permitAll()
.anyRequest().authenticated()
.and()
.addFilterAfter(jwtFilter, UsernamePasswordAuthenticationFilter.class)
)
.build();
}
@Bean
public static PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Такая простыня — как минимум неуважение к участкам группы, которые могут тебе помочь.
А в чем неуважение?
В том что такое невозможно читать в виде сообщения в телеграмме.
Обсуждают сегодня