Я создал RestController, который должен помочь управлять тегами в веб-приложении. Я буду называть все методы с помощью AJAX (с помощью JQuery), но результаты по умолчанию безопасности Spring-Boot в следующем (при вызове из Postman):Spring RestController требует CSRF
{ "метки": 1438800538949, "Статус": 403 , «error»: «Forbidden», «message»: «Недопустимый токен CSRF« null »был найден в параметре запроса« _csrf »или заголовке« X-CSRF-TOKEN ».», «путь»: «/ tag/add " }
Каков наилучший способ получить токен CSRF для вызовов JQuery? Я предполагаю, что это лучше, чем отключить его. Как насчет использования PostMan?
Это код контроллера:
@RestController
public class TagController {
@Autowired
private TagService tagService;
@RequestMapping(name = "/tag/list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TagList> getTagList() {
TagList result = new TagList(tagService.list());
return new ResponseEntity<TagList>(result, HttpStatus.OK);
}
@RequestMapping(name = "/tag/add", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> addTag(@RequestBody AlterTagForm form) {
try {
tagService.addTag(form.getArticleId(), form.getTagName());
return new ResponseEntity<>(HttpStatus.ACCEPTED);
} catch (EntityNotFoundException ex) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@RequestMapping(name = "/tag/remove", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> removeTag(@RequestBody AlterTagForm form) {
try {
tagService.removeTag(form.getArticleId(), form.getTagName());
return new ResponseEntity<>(HttpStatus.ACCEPTED);
} catch (EntityNotFoundException ex) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
}
Как это Rest API, вы можете отключить проверку конфигурации csrf. Обычно это выполняется с помощью 'httpSecurity.csrf(). Disable()' в 'WebSecurityConfigurerAdapter .configure()' метод. Также сделайте его безстоящим с помощью 'httpSecurity.sessionManagement(). SessionCreationPolicy (SessionCreationPolicy.STATELESS)'. Поскольку я не смотрю на Spring boot, не знаю, как это делается в нем. –