Как я уже говорил в комментарии, один быстрый и простой способ сделать это - добавить новые пользовательские права доступа в класс AuthoritiesConstants.java
. У вас есть примеры того, как это сделать здесь и здесь .
public final class AuthoritiesConstants {
public static final String ADMIN = "ROLE_ADMIN";
public static final String USER = "ROLE_USER";
public static final String ANONYMOUS = "ROLE_ANONYMOUS";
public static final String GETCLIENT = "ROLE_GETCLIENT"; // custom
private AuthoritiesConstants() {
}
}
Не забудьте вставить новую роль в таблицу базы данных jhi_authority
. Вы можете назначить пользователю новые права доступа через интерфейс управления admin/user-management
, возможно, пользователю необходимо внести изменения в журнал, чтобы изменения вступили в силу.
Затем в методе, который вы хотите защитить, просто добавьте:
@GetMapping("/clients/{id}")
@PreAuthorize("hasRole(\"" + AuthoritiesConstants.GETCLIENT + "\")")
public ResponseEntity<ClientDTO> getClient(@PathVariable Long id) {
log.debug("REST request to get Client : {}", id);
Optional<ClientDTO> clientDTO = clientService.findOne(id);
return ResponseUtil.wrapOrNotFound(clientDTO);
}
Я уже говорил @Secured
ранее, но на самом деле вы должны использовать @PreAuthorize
, поскольку он более мощный и позволяет работать с Spring Expression Language (SpEL) .
Ресурс go для понимания того, как работает защита JHipster, здесь , но на самом деле он просто следует стандартным руководствам Spring Security (как и многим другим), поэтому официальная документация о Spring Security также должно применяться.
Кроме того, если вы считаете, что это слишком просто или нарушает принятые по умолчанию соглашения, я обнаружил это руководство о пользовательских привилегиях, которые особенно хороши. Это немного больше работы, но должно работать лучше, так как вы отделяете полномочия (роли) от привилегий.