С появлением 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