Я использую аннотацию Spring Security @PreAuthorize, и она работает, когда я использую «известные хорошие» выражения, которые я видел в документации или в другие онлайн-примеры. Пример кода не является реальным прецедентом, он надуман.Как переменная сеанса может быть прочитана в выражении аннотации Spring, а именно @PreAuthorize
Следующие выражения представляют собой все варианты тех, которые работали над методом или методами, аналогичными по форме методу ниже. Эти выражения не используются в одно и то же время или даже тот же метод, который они просто отображаются здесь вместе для простоты.
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PreAuthorize("hasAuthority('PERM_XYZ') or authentication.principal.id == #ownerId")
@PreAuthorize("hasRole('ROLE_USER') and #someValue == 'testValue'")
public List<Item> getSomeItems(Integer ownerId, String someValue) {
// code goes here
}
То, что я хотел бы быть в состоянии сделать это проверить метод аргумент против переменной сеанса в выражении, как это:
@PreAuthorize("hasAuthority('PERM_XYZ') or #someValue == session.someOtherValue")
public List<Item> getSomeItems(Integer someValue) {
// code goes here
}
Я бы подумал, что доступ к сессии в выражении будет быть основной задачей, но я не нашел ни одного примера онлайн, или даже кто-нибудь спрашивает, как это сделать.
Я пробовал все следующие и многие другие, но все они генерируют исключения:
@PreAuthorize("#someValue == #session.someValue")
@PreAuthorize("#someValue == session.someValue")
@PreAuthorize("#someValue == session.getAttribute('someValue')")
@PreAuthorize("#someValue == request.session.someValue")
@PreAuthorize("#someValue == request.session.getAttribute('someValue')")
Все выше относится к Spring Security и @PreAuthorize аннотацию, но эти вещи действительно не являются центральными на вопрос ,
Я знаю много альтернатив для доступа к сеансу и уже разрешил свой вариант использования, но мне все же интересно, можно ли получить доступ к сеансу через выражение в любой аннотации.
Итак ... может ли пользовательский сеанс получить доступ в выражении выражения аннотации Spring, и если да, то как? Благодарю.
Если вы используете Spring Security, почему вы хотите, чтобы проверить переменный сеанс вместо текущего пользователя. –
У меня было сильное чувство, что «почему вы хотите это сделать» настроение появится почти сразу. «UserId» в исходном примере кода не является реальным прецедентом, поэтому он был заменен более общим примером, показывающим выполняемые выражения. В основном я хочу знать, есть ли простой способ доступа к объекту сеанса или объекту запроса через выражение аннотации. Это, в конечном счете, вопрос любопытства, потому что я не мог сделать что-то, что мне было бы легко. –
Затем вы можете использовать образец, который не полагается или не разрешает аутентификацию. Запрос должен быть доступен, поэтому я бы ожидал 'request.session.getAttribute ('someValue')' на самом деле. Все ли они генерируют одно и то же исключение или разные? –