Весна безопасности @ примечание для IS_AUTHENTICATED_FULLY? - PullRequest
1 голос
/ 27 марта 2010

Я просто пытаюсь разрешить пользователю доступ к методу, если он аутентифицирован, но, похоже, ничего из того, что я делаю, не работает. Есть ли способ просто проверить, был ли пользователь аутентифицирован? Следующее по-прежнему запрещает пользователю даже при аутентификации ... Есть ли встроенная роль для аутентифицированного пользователя?

@RequestMapping("/secure")
@PreAuthorize("hasRole('IS_AUTHENTICATED_FULLY')")
public String secure(ModelMap map){
    return("secure");
}

Ответы [ 5 ]

12 голосов
/ 14 июля 2012

IS_AUTHENTICATED_FULLY не является ролью - это предопределенные учетные данные (также называемые «волшебной» строкой), распознаваемые AuthenticatedVoter, чтобы указать, что вы вошли в систему. Этот избиратель также поддерживает анонимный вход и вход в систему запомнить меня.

Роли обрабатываются RoleVoter, который распознает любое ядро, начинающееся с "ROLE_" (префикс настраивается). Таким образом, hasRole('IS_AUTHENTICATED_FULLY') не работает, потому что это не роль. @RolesAllowed("IS_AUTHENTICATED_FULLY") не будет работать по той же причине.

При использовании языка выражений Spring правильное выражение:

 @PreAuthorize("isAuthenticated()")

В качестве альтернативы вы можете использовать:

 @Secured("IS_AUTHENTICATED_FULLY")

Пользовательские классы не требуются - оба избирателя включены по умолчанию.

1 голос
/ 06 апреля 2010

В вашей пользовательской реализации UserDetailService просто добавьте роль "IS_AUTHENTICATED_FULLY" к объекту User до его возвращения.

1 голос
/ 27 марта 2010

hasRole('ROLE_USER') - это традиционное имя для любого пользователя, который прошел аутентификацию.Обычно вы используете ROLE_ANONYMOUS для частей, в которых вам все равно, аутентифицирован человек или нет.

(добавлено позже:)

Я думаю, вам потребуется реализовать пользовательский AccessDecisionVoter , который всегда будет голосовать ACCESS_GRANTED всякий раз, когда параметр аутентификации имеет значение isAuthenticated () true, а CONFIG_ATTRIBUTE равно ROLE_USER или подобному.

Дальнейшее обсуждение этого в этом обсуждение на форуме с подробным описанием файла web.xml и других настроек.

0 голосов
/ 31 августа 2017

это должно работать:

@PreAuthorize("isFullyAuthenticated()")
0 голосов
/ 07 апреля 2010

Вот что я использовал:

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