Niektóre metody kontrolera, takie jak usuwanie wiadomości, są dostępne tylko dla zalogowanych użytkowników. W kontrolerze wywołuję metodę usuwania wiadomości (kontroler dostępny tylko dla zalogowanych użytkowników)
@PreAuthorize("hasRole('ROLE_USER')")
@DeleteMapping(value = "/sent/{id}")
public
void deleteMessageSent(
@ApiParam(value = "The message ID", required = true)
@PathVariable("id") final String id
) {
this.messagePersistenceService.deleteMessageSent(id, this.authorizationService.getUserId());
}
Do metody deleteMessageSent
serwisu messagePersistenceService
przesyłam oprócz ID wiadomości, to również ID zalogowanego użytkownika uzyskane z serwisu authorizationService
. Następnie dzięki ID zalogowanego użytkownika mogę usunąć wiadomość
@Override
public void deleteMessageSent(
@NotBlank final String messageId,
@NotBlank final String userId
) throws ResourceNotFoundException {
...//usuwanie wiadomości
}
Jednak tak zastanawiam się, czy jest to bezpieczny sposób. Czy przesyłanie ID użytkownika zalogowanego z kontrolera za każdym razem, gdy mamy do czynienia z kontrolerem dostępnym tylko dla zalogowanych jak np. wysyłanie wiadomości, dodawanie itd. jest bezpieczne. Jest możliwość, aby przenieść authorizationService
do samego serwisu np. deleteMessageSent
. I wtedy w kontrolerze wysyłałoby się tylko ID wiadomości
@PreAuthorize("hasRole('ROLE_USER')")
@DeleteMapping(value = "/sent/{id}")
public
void deleteMessageSent(
@ApiParam(value = "The message ID", required = true)
@PathVariable("id") final String id
) {
this.messagePersistenceService.deleteMessageSent(id);
}
a w metodzie serwisu dopiero uzyskiwałbym ID zalogowanego użytkownika
@Override
public void deleteMessageSent(
@NotBlank final String messageId
) throws ResourceNotFoundException {
final Long userId = this.authorizationService.getUserId(); // uzyskanie ID zalogowanego użytkownika
...//usuwanie wiadomości
}
Chciałbym zapytać się Was, czy jest to jakaś duża różnica j jak wpływa to na bezpieczeństwo.