2012-07-18 14 views
9

W naszej aplikacji zaplanowaliśmy używać mechanizmu RoleVoter ale chcielibyśmy usunąć przedrostek ROLE_ jako zabezpieczenie wdrażamy jest bardziej zadanie oparte niż roli opartej.Dlaczego funkcja RoleVoter Spring Security potrzebuje prefiksu?

Technicznie, nie ma problemu z implementacją, ale znalazłem w dokumentacji, że using the RoleVoter with an empty prefix should be discouraged.

Zastanawiam się, dlaczego?

AFAICS, jedynym problemem jest to, że bez prefiksu The RoleVoter będą uczestniczyć w podejmowaniu decyzji, że nie ma (takich jak IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, ...) i moc wraca dostępu odmówiono zamiast powstrzymywać się .

Czy możesz potwierdzić, że jest to jedyny problem z pustym prefiksem?

góry dzięki M.

Odpowiedz

13

Tak. Jeśli używasz wielu wyborców lub niestandardowego wyborcy, muszą wiedzieć, które atrybuty powinny skonsumować. Na przykład, jeśli masz atrybut DayOfTheWeekVoter i masz zasób zdefiniowany atrybutami ROLE_USER,DAY_MONDAY, wtedy RoleVoter może głosować nad przyznaniem dostępu, ponieważ użytkownik ma rolę "Użytkownik", ale DayOfTheWeekVoter może odmówić dostępu, ponieważ nie jest to poniedziałek.

Jeśli nie skonfigurujesz RoleVoter z prefiksem, to sprawdzisz, czy użytkownik ma przypisaną uprawnienie "DAY_MONDAY", więc ten scenariusz nie zadziała.

Jeśli interesują Cię tylko role, możesz obejść się bez prefiksu lub użyć wyrażeń (takich jak hasRole('user')), które nie używają RoleVoter.

+1

Witaj Luke, właśnie uaktualniam Spring Boot z 1.2.2 do 1.3.2 i to zaczęło mnie hamować. Moje kontrolery mają @PreAuthorize ("hasRole ('Edit')") i teraz zaczynają sprawdzać prefiks ROLE_. Wygląda na to, że twoje wyjaśnienie hasRole() uległo zmianie odkąd opublikowałeś tę odpowiedź, ponieważ przechodzi ona przez RoleVoter. Próbowałem znaleźć sposób, aby ustawić prefiks do opróżnienia "", ale żaden z nich nie działa ... Czy możesz polecić inny sposób, aby to zrobić w Spring Boot 1.3.2? – szxnyc

+2

Zmieniłem go na haaAuthority i zadziałało. – szxnyc

Powiązane problemy