Spring ошибка безопасности 403
Я пытаюсь защитить свой сайт с помощью Spring безопасности, следуя инструкциям в Интернете. Таким образом, на моей стороне сервера WebSecurityConfigurerAdapter и контроллер выглядят следующим образом:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
implements ApplicationContextAware {
@Override
protected void registerAuthentication(AuthenticationManagerBuilde r authManagerBuilder) throws Exception {
authManagerBuilder.inMemoryAuthentication()
.withUser("user").password("password").roles("ADMI N");
}
}
@Controller
//@RequestMapping("/course")
public class CourseController implements ApplicationContextAware{
@RequestMapping(value="/course", method = RequestMethod.GET, produces="application/json")
public @ResponseBody List<Course> get(// The critirion used to find.
@RequestParam(value="what", required=true) String what,
@RequestParam(value="value", required=true) String value) {
//.....
}
@RequestMapping(value="/course", method = RequestMethod.POST, produces="application/json")
public List<Course> upload(@RequestBody Course[] cs) {
}
}
Что меня очень смущает, сервер не отвечает методу POST/DELETE, а метод GET работает нормально. Кстати, я использую RestTemplate на стороне клиента. Исключения:
Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 403 Forbidden
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:574)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:530)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:487)
at org.springframework.web.client.RestTemplate.delete(RestTemplate.java:385)
at hello.Application.createRestTemplate(Application.java:149)
at hello.Application.main(Application.java:99)
Я искал интернет в течение нескольких дней. Все еще не имеют понятия. Пожалуйста помоги. Большое спасибо
Ответы
Ответ 1
Вероятно, проблема связана с защитой CSRF. Если пользователи не будут использовать ваше приложение в веб-браузере, можно безопасно отключить защиту CSRF. В противном случае вы должны убедиться, что включили токен CSRF в запрос.
Чтобы отключить защиту CSRF, вы можете использовать следующее:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig
extends WebSecurityConfigurerAdapter implements ApplicationContextAware {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.csrf().disable();
}
@Override
protected void registerAuthentication(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
authManagerBuilder
.inMemoryAuthentication()
.withUser("user").password("password").roles("ADMIN");
}
}
Ответ 2
Проверьте свой токен, который вы отправляете через "Заголовок", а также запросите в вашей базе данных тот же токен, существует ли этот токен или нет.
Примечание. Вышеуказанное применимо только в том случае, если вы используете механизм аутентификации токена Spring Boot.