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()" />

и он будет работать.