Контекст
Контекст пользователя — это любая информация о текущем пользователе приложения.
Использование
К контексту пользователя существует быстрый доступ из некоторых мест в XML через "решётку" и фигурные скобки:
Контекст в значении по умолчанию поля
<input-text id="login" default-value="#{username}"/>
Места применения контекста в XML
Место | Описание |
---|---|
*/[control]/@default-value | Значение по умолчанию поля ввода |
/query/fields/field/filters/[filter-type]/@default-value | Значение по умолчанию фильтра выборки |
/query/fields/field/select/@default-value | Значение по умолчанию поля выборки |
/object/operations/operation/in/field/@default-value | Значение по умолчанию входящего параметра операции |
/object/operations/operation/out/field/@default-value | Значение по умолчанию исходящего параметра о перации |
*/filters/[filter-type]/@value | Значение предустановленного фильтра |
/access/*/object-access/[filter-type]/@value | Значение фильтра доступа |
В случае, когда значение контекста отсутствует, возвращается null
.
Если логика приложения не допускает null
контекст, можно сделать его обязательным, добавив восклицательный знак в конце:
Обязательный контекст в значении по умолчанию поля
<input-text id="name" default-value="#{firstName!}"/>
Подключение
Для подключения контекста необходимо задать Spring бин ContextEngine
.
В N2O существует 2 реализации контекста:
ConcurrentMapContextEngine
- контекст на основе ConcurrentHashMap (подключен по умолчанию)SessionContextEngine
- контекст на основе сессии приложения
Можно подключить свою реализацию контекста на основе текущей системы аутентификации:
Пример реализации контекста при OAuth аутентификации
@Component
class OAuthContextEngine extends SessionContextEngine {
@Override
public Object get(String name) {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Map<String, Object> attributes = ((DefaultOidcUser)principal).getAttributes();
Object value = attributes.get(name);
return value != null ? value : super.get(name);
}
}