В моем приложении Spring Boot я создал WebSecurityConfigurerAdapter
со следующей конфигурацией:
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("student").password(passwordEncoder().encode("password")).roles("STUDENT")
.and()
.withUser("teacher").password(passwordEncoder().encode("admin")).roles("TEACHER");
}
Я использую браузер для входа в систему и получаю токен Cookie, сохраненный как JSESSIONID.Затем я продолжаю брать этот cookie и использовать его в почтальоне как:
При вызове следующей конечной точки из Почтальона:
@PostMapping(consumes = "application/json", produces = "application/json", path="/rest/class/{classId}/student")
@org.springframework.security.access.annotation.Secured({"ROLE_TEACHER"})
Я получаю403 Запрещено (без cookie, я получаю 401, по понятным причинам).
Я также использую следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Используя эти зависимости, моя страница входа в тимелист создается автоматически.
Как я могу решить эту проблему аутентификации / авторизации?
Нужно ли отключить csrf?Если нет, то как я могу использовать токен csrf в своем запросе почтальона?Я попытался добавить его в запрос заголовка Postman, используя X-CSRF-TOKEN, и использовал токен _csrf, который был отправлен бэкэнду, во время входа в систему.Если я отключу csrf, то страница входа в систему даже не появится, и я получу следующее исключение:
NotReadablePropertyException: недопустимое свойство 'Principal.authorities' класса EJB