Определить аннотацию @DeclareRoles программно - PullRequest
0 голосов
/ 06 марта 2019

Аннотация JAVA EE @DeclareRoles - это способ объявления списка возможных ролей пользователей для сопоставления с аннотацией @RolesAllowed.

Но что, если наши роли хранятся в базе данных и если список потенциальных ролей длинный?

В настоящее время я использую роли для указания атомарного доступа к функциям на моем веб-сайте, поэтому у меня есть длинный список ролей, так как некоторые пользователи могут получить доступ к functionnality-1, но не к 2, а некоторые могут на 2, но не на 1 и т. Д.

Я хочу избегать редактирования аннотации @DeclareRoles каждый раз, когда создаю новую роль для новой функциональности, поэтому возникает вопрос:

Есть ли способ программно настроить аннотацию @DeclareRoles или указать, что она должна загружаться из базы данных?

1 Ответ

0 голосов
/ 29 марта 2019

С появлением API безопасности JavaEE 8 у вас есть возможность создавать свое собственное хранилище идентификаторов. Это позволяет вам извлекать пользователей и пользовательские данные из пользовательского местоположения и пользовательского сервиса. Вы спрашивали об использовании базы данных - вот пример использования фасада базы данных вместе с пользовательским хранилищем идентификаторов;

@ApplicationScoped
public class MyIdentityStore implements IdentityStore {
    @EJB private UserFacade userFacade;

    @Override
    public int priority() {
        return 50;
    }

    @Override
    public Set<ValidationType> validationTypes() {
        return EnumSet.of(ValidationType.PROVIDE_GROUPS, ValidationType.VALIDATE);
    }

    @Override
    public Set<String> getCallerGroups(CredentialValidationResult validationResult) {
        final String userName = validationResult.getCallerPrincipal().getName();
        final User user= usersFacade.find(userName);
        return user.getRoles();
    }

    public CredentialValidationResult validate(UsernamePasswordCredential credential) {
        /* Handle validation/login of the user here */
    }
}

Чтобы объяснить вышесказанное немного подробнее - getCallerGroups() вернет роли, в которые входит пользователь, - то, что вы можете затем использовать в API безопасности JavaEE и методах блокировки, таких как @RolesAllowed. Метод validate() обрабатывает проверку пользователя, когда контейнер запрашивает проверку. Наконец, метод validationTypes() просто указывает, для чего следует использовать это хранилище удостоверений - в этом случае мы указали как выборку ролей, так и обработку проверки.

Таким образом, с тех пор как EE8 представил это - он стал действительно гибким и простым в использовании возможностей безопасности в платформе.

Вот несколько действительно замечательных ссылок на эту тему;

https://www.ibm.com/developerworks/library/j-javaee8-security-api-1

https://www.ibm.com/developerworks/library/j-javaee8-security-api-2

https://www.ibm.com/developerworks/library/j-javaee8-security-api-3

https://www.baeldung.com/java-ee-8-security

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...