Spring безопасность - разрешение анонимного доступа
Я реализовал Oauth2 в своем приложении spring -boot. В моем security-context.xml у меня есть эти строки -
<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" />
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" />
Я хочу, чтобы все под ключом/доверенным было доступно без аутентификации. Тем не менее, я все еще запрашиваю аутентификацию при попытке доступа/надежных ресурсов (тезисы - ресурсы RESTful).
Я пропустил что-то еще?
[Edit:] Я запускаю это приложение с помощью "предоставленного" экземпляра tomcat.
Ответы
Ответ 1
Вам просто нужно заменить атрибут trusted intercept expression access
, и он должен работать:
<sec:intercept-url pattern="/trusted/**" filters="none" />
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" />
Хотя, поскольку Spring Security 3.1 устарел filters
, вы должны использовать теги http
для достижения такого же эффекта:
<http pattern="/trusted/**" security="none"/>
<http auto-config='true'>
<intercept-url pattern="/**" access="isFullyAuthenticated()" />
<form-login login-page='/login.jsp'/>
</http>
Вы можете прочитать об этом здесь.
Ответ 2
<http>
<intercept-url pattern="/trusted/**" access="ROLE_USER,ROLE_GUEST" />
<intercept-url pattern="/messagePost.htm*" access="ROLE_USER" />
<intercept-url pattern="/messageDelete.htm*" access="ROLE_ADMIN" />
<anonymous username="guest" granted-authority="ROLE_GUEST" />
<remember-me />
</http>
<anonymous username="guest" granted-authority="ROLE_GUEST" />
Вы можете определить такую роль, как ROLE_GUEST, и упомянуть, как это делает предыдущий код. Любой анонимный член может получить доступ к шаблону url в ROLE_GUEST
Ответ 3
Конфигурация неправильная. Теперь скажите, что происходит, вы сообщаете, что Spring безопасность разрешает анонимный доступ ко всему под /trusted/**
, который в порядке, но затем вы снова укажете ему, чтобы ограничить весь анонимный доступ в /**
- это каждый путь в вашем приложении, который, очевидно, также ограничивает доступ к /trusted/**
.
Вам нужно изменить конфигурацию на что-то вроде этого:
<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" />
<sec:intercept-url pattern="/secure/**" access="isFullyAuthenticated()" />
и он будет работать.