spring security 4.1.3.RELEASE
intercept-url
request-matcher="mvc"
Я пытаюсь использовать spring-security.xml для настройки моей веб-безопасности с request-matche="mvc"
, но шаблон "/ users / {userId: id}" не работает.
Мой конфиг выглядит как следующий код:
<http entry-point-ref="myAuthenticationEntryPoint" auto-config="true" use-expressions="true" create-session="stateless" request-matcher="mvc"
access-decision-manager-ref="myAccessDecisionManager">
<intercept-url pattern="/users/{userId:\\d+}" method="GET" access="@webSecurity.isMe(authentication, #userId) or hasAnyRole('ADMIN')"/>
<intercept-url pattern="/users/management" method="GET" access="hasAnyRole('ADMIN')"/>
</http>
Я ожидаю, что запрос для / users / 12345 будет соответствовать шаблону / users / {userId: \ d +}, который будет соответствовать 12345 для userId, а запрос для / users / management будет соответствовать шаблону / users / management , Однако на самом деле шаблон / users / {userId: \ d +} не работает, он никогда не соответствует запросу / users / 12345. и если я изменю настройку на следующий код:
<http entry-point-ref="myAuthenticationEntryPoint" auto-config="true" use-expressions="true" create-session="stateless" request-matcher="mvc"
access-decision-manager-ref="myAccessDecisionManager">
<intercept-url pattern="/users/{userId}" method="GET" access="@webSecurity.isMe(authentication, #userId) or hasAnyRole('ADMIN')"/>
<intercept-url pattern="/users/management" method="GET" access="hasAnyRole('ADMIN')"/>
</http>
Удалите: \ d + из / users / {userId: \ d +}, он будет соответствовать запросу для / users / 12345. Но он также будет соответствовать запросу для / users / management, что делает значение userId равным неожиданному «управлению». Я попробовал ant-matcher и regex-matcher, и я не могу найти userId в идеальном решении.