У меня есть приложение Spring Boot с безопасностью на уровне метода с помощью @RollsAllowed('NAME_OF_THE_ROLE') Ситуация, в которой я столкнулся, заключается в том, что когда приложение переходит из среды разработки в среду более высокого уровня, а оттуда в рабочую среду, имена групп безопасности меняются. Любые идеи о том, как я могу ввести имя безопасности в @RollsAllowed() в зависимости от того, в какой среде я развертываю приложение?
Решение 1: Множественная толерантность
Если имя вашей роли не меняется со временем и между средами нет конфликта имен, вы можете использовать аннотацию @Secured с разными группами в зависимости от среды.
Например @Secured({ "DEV_VIEWER", "ALPHA_VIEWER", "PRD_VIEWER"})
Решение 2: Ручная работа
В противном случае, если вы хотите что-то, вы можете переключиться на аннотацию @PreAuthorize с помощью Custom PermissionEvaluator.
Baeldung сделал довольно полное руководство на эту тему https://www.baeldung.com/spring-security-create-new-custom-security-expression
вы можете передать в параметре общее имя разрешения или даже ключ yml. и это метод hasPermission, который делает разрешение
Поскольку вы сами пишете метод hasPermission, вы также можете убедиться, что он не принимает никаких параметров, а затем использовать более подходящие имена методов, такие как hasReadPrivilege
с пользовательским оценщиком проблема все еще существует? например in
@PostAuthorize("hasAuthority('FOO_READ_PRIVILEGE')")Я хочу, чтобыFOO_READ_PRIVILEGEчасть читалась из файла/чего-то.