Учитывая ваши комментарии, я думаю, что это может быть связано с отсутствующим префиксом ROLE_
для ваших ролей и / или изменением поведения в Spring Security 4.
Роли часто автоматически имеют префикс при заполнении. Например, DefaultLdapAuthoritiesPopulator
содержит свойство rolePrefix
, которое по умолчанию установлено на ROLE_
(см. источник и в этих документах ). Следовательно, все роли, полученные через LDAP, будут автоматически иметь префикс. Если это так в вашей ситуации, конечно, зависит от того, как вы заполняете свои роли.
Начиная с Spring Security 4, DefaultWebSecurityExpressionHandler
по умолчанию добавляет префикс ROLE_
к hasRole(String)
и hasAnyRole(String...)
(см. источник ). Например, если используется hasRole("ADMIN")
, то роль ROLE_ADMIN
будет проверяться DefaultWebSecurityExpressionHandler
.
Использование hasAuthority("ADMIN")
работает, так как префикс для этого выражения не добавляется.
Так что в вашем случае, если ваши роли заполнены без ROLE_
, использование hasRole("ADMIN")
может на самом деле попытаться сопоставить с ROLE_ADMIN
, в зависимости от используемой версии Spring Security. Это также влияет на Thymeleaf, так как Thymeleaf просто использует функциональность Spring Security.