Не удалось оценить выражение hasRole (USER) - PullRequest
0 голосов
/ 15 марта 2020

Я хочу использовать Spring Security 5.3

Настроить на xml вот так

<http auto-config="true">
    <intercept-url pattern="/list" access="hasRole(USER)"/>
    <intercept-url pattern="/security" access="isAnonymous()"/>
    <http-basic />
    <form-login login-page="/security"
                  login-processing-url="/security"
                  default-target-url="/list"
                  authentication-failure-url="/security?error"
                  username-parameter="username"
                  password-parameter="password"/>

    <logout logout-success-url="/security?logout"/>
    <csrf disabled="true"/>
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="user" password="$2a$10$BHjEcnhAgqRH0Vj6aPmGTOtQfYdx3PsvTWjsVxVBouiLTzGSLTSz2" authorities="USER"/>
        </user-service>
        <password-encoder ref="encoder" />
    </authentication-provider>
</authentication-manager>

<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

при входе в систему я получаю эту ошибку:

java .lang.IllegalArgumentException: не удалось оценить выражение 'hasRole (USER)' org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils. java: 30) org.springframework.seccess.web. expression.WebExpressionVoter.vote (WebExpressionVoter. java: 52) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter. java: 33) org.springframework.secased.acirvB. решить (AffirrativeBased. java: 63) org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation (AbstractSecurityInterceptor. java: 233) org.springframework.security.web.access.intercept.FilterSerceptSerceptSource java: 123) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityI nterceptor. java: 90) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter: ExF. 118) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementF. security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication. VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter. irtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter. java: 63) org.springframework. java: 334) org.springframework.security.web.authentication. www.BasicAuthenticationFilter.doFilterInternal (BasicAuthenticationFilter. java: 155) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java 119): springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter. FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter. java: 116) org.springframework.Filter.Filter. Dofi lter (FilterChainProxy. java: 334) org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter (HeaderWriterFilter. java: 92) org.springframework.security.web.header.HeaderWritFerterFter *: 77) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain. security.web.context.request.asyn c .WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter. java: 56) org.springframework.web.filter. .web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.context. SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter. java: 105) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) *: 215) org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy. java: 178) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy. * 10f. filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy. java: 271)

Root Причина

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойство или поле 'USER' не может быть найдено в объекте типа 'org.springframework.security.web.access.expression.WebSecurityExpression Root' - возможно, не опубликовано c или недействительно? org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty (PropertyOrFieldReference. java: 217) org.springframework.expression.spel.ast .PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference.) spel.ast.PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference. java: 91) org.springframework.expression.spel.ast.MethodReference.getArguments (MethodReference. java: 164) org.springframework.expression.shopelReference. getValueInternal (MethodReference. java: 94) org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue (SpelNodeImpl. java: 117) org.springframework.expression.spel.standard.SpelExpression 10lp. *: 302) org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils. java: 26) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter 52): * *. org.springframework.security.web.access.expression .WebExpressionVoter.vote (WebExpressionVoter. java: 33) org.springframework.security.access.vote.AffirrativeBased.decide (AffirrativeBased. java: 63) org.springframework.security.access.intercept.AbocuInScept . java: 233) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor. java: 123) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.docept. 1076 *: 90) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter * 118 * 1078 org. .springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter. 137.pr. .Фильтр ChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication.AnonymousAuthenticationFilter. FilterChainProxy. java: 334) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter. java: 158) org.springframework.Proha. 334) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter. java: 63) org.springframework.security.web. security.web.authentication. www.BasicAuthenticationFilter.doFilterInternal (BasicAuthenticationFilter. java: 155) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) org.springframework.security. web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter (AbstractAuthenticationProcessingFcessterFilter. *. doFilter (FilterChainProxy. java: 334) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter. java: 116) org.springframework.security.web. java: 334) org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter (HeaderWriterFilter. java: 92) org.springframework.security.web.header.HeaderWriterFilter.doFilterInerF: * 77: 77 org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain. context.request .asyn c .WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter. java: 56) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.doF. doFilter (FilterChainProxy. java: 334) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter. java: 105) org.springframework.security.web.Filter $Proin.ChainCherinChaterChainChaterChain *: 334) org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy. java: 215) org.springframework.security.web. filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy. java: 358) org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy. java: 271)

какая ошибка в моем коде 1018 *

Ответы [ 3 ]

1 голос
/ 15 марта 2020

Это должно быть

hasRole('USER')

Примечание: одинарные кавычки вокруг USER.

1 голос
/ 15 марта 2020

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'USER' cannot be found on object of type

Из вышеприведенной ошибки видно, что проблема в том, что пользователь USER не распознается в рамках системы безопасности Spring. Вы забыли добавить заключить пользователя в ''.

Проблема в выражении: <intercept-url pattern="/list" access="hasRole(USER)"/>. Замените его на <intercept-url pattern="/list" access="hasRole('USER')"/>, и он будет работать.

Еще одна проблема, я видел, что вы используете hasRole для защиты своего ресурса /list, но вы предоставили пользователю полномочия USER authorities="USER". Что произойдет, так это то, что hasRole добавит префикс ROLE_ к аргументу USER, который вы передали. Таким образом, ROLE_USER не будет равен USER, который является полномочием, которое вы назначаете пользователю.

Чтобы это исправить, вы можете либо изменить полномочия на `` `authority =" ROLE_USER "` `.

, либо заменить hasRole на hasAuthority, как показано ниже: access="hasAuthority('USER')".

0 голосов
/ 15 марта 2020

Я заменил hasRole(USER) на hasAuthority('USER') и все заработало

...