2016-06-25 2 views
2

Я использую Spring Security версии 4.1. Если я укажу access="hasRole('ROLE_ADMIN')" или access="ROLE_ADMIN" в конфигурации безопасности, я могу войти в систему, но я не могу получить доступ к моей странице администратора.Spring Security не работает с "hasRole ('ROLE_ADMIN')" или ROLE_ADMIN

<security:http use-expressions="true"> 
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /> 
    <!-- security:intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')"/--> 
    <security:intercept-url pattern="/createmanufsensors" access="isAuthenticated()" /> 
</security:http> 
<security:global-method-security secured-annotations="enabled"></security:global-method-security> 

Ниже ошибка отладки:

DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Secure object: FilterInvocation: URL: /admin; Attributes: [hasRole('ROLE_ADMIN')]  
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Previously Authenticated: org.springframew[email protected]cc305a73: Principal: [email protected]: Username: francatore             ; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN        ; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]166c8: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 7F702A6911A71EA5556C750B6D424FF5; Granted Authorities: ROLE_ADMIN         
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.access.vote.AffirmativeBased] Voter: org.sp[email protected]170ea084, returned: -1 
2016-06-25 10:07:53,668 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler 

Что я мог не быть?

+0

Рулон присваивается пользователю при создании пользователя и учетной записи. Пользователю, указанному выше, было присвоено значение «ROLE_ADMIN», а остальные пользователи - «ROLE_USER». Роль сохраняется в таблице полномочий в базе данных. –

ответ

4

У меня есть небольшое объяснение для этого. Здесь вы аутентифицированы как обычный пользователь, но не авторизованы для просмотра страницы администратора.

Если вы используете access="hasRole('ROLE_ADMIN')" выражение, то весна EL класса (т.е. SecurityExpressionRoot) добавит префикс ROLE_ к каждой роли , что мы имеем обеспечить в hasRole() выражении. Таким образом, в вашем случае роль, которую вы предоставили в hasRole('ROLE_ADMIN'), разрешается до ROLE_ROLE_ADMIN.

Вот почему вы авторизованы как пользователь, у которого есть ROLE_ADMIN. Но к структуре Spring Security для просмотра страницы администратора пользователь должен иметь роль (потому что класс SecurityExpressionRoot добавлен ROLE_ префикс).

Таким образом, для этого удалить этот ROLE_ префикс в вашем коде, то есть здесь access="hasRole('ADMIN')" Таким образом, Spring Security будет добавить, что ROLE_ приставка автоматически. И убедитесь, что вы указали свою роль администратора в базе данных как ROLE_ADMIN.

Смежные вопросы