Аутентифицированные и неаутентифицированные представления одного и того же ресурса в Spring Security - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь создать ресурс, к которому могут обращаться как аутентифицированные, так и не аутентифицированные пользователи. У меня также есть аутентификация «помни меня». Для пользователя, обращающегося к ресурсу (странице), я хочу, чтобы аутентификация типа "помни меня" попыталась войти в систему. Если вход не был успешным, я хочу, чтобы страница все еще отображалась, но действовала по-другому. Когда я пишу свои URL-адреса для перехвата безопасности, я могу выбрать «none» или «Role_User». Могу ли я заставить пружину работать так, чтобы она пыталась использовать ROLE_USER, если она не удалась, то она должна постепенно уменьшиться до «None»? Вот как выглядит мой весенний конфиг.

<security:http auto-config='true'>
 <security:intercept-url pattern="/dynamicPage" filters="none"/>
  <security:intercept-url pattern="/**" access="ROLE_USER" />
  <security:form-login login-page="/index"
        default-target-url="/home" always-use-default-target="true"
        authentication-success-handler-ref="AuthenticationSuccessHandler"        
        login-processing-url="/j_spring_security_check" 
        authentication-failure-url="/index?error=true"/>
   <security:remember-me key="myLongSecretCookieKey" token-validity-seconds="1296000" 
        data-source-ref="jdbcDataSource" user-service-ref="AppUserDetailsService" />
</security:http>

Я хочу, чтобы динамическая страница попробовала "Role_User" с аутентификацией "запомнить меня", дождаться сбоя и вернуться к "нет". Есть ли рекомендуемый способ сделать это?

Я узнал не о таких выражениях, как isRememberMe () и о цепочечных выражениях, но я все еще не знаю, как решить эту проблему. Я хочу что-то вроде этого.

<security:intercept-url pattern="/dynamicPage" filters="ROLE_USER,none"/>

Поскольку ни один из них не возвращается запросом getAuthorities, мне нужно найти другой способ сделать это.

1 Ответ

2 голосов
/ 10 августа 2011

Я бы использовал «анонимную аутентификацию», когда пользователь без аутентификации.

добавить

<security:anonymous key="anonymous-security" />

к вашей конфигурации и

<security:intercept-url pattern="/dynamicPage" access="IS_AUTHENTICATED_REMEMBERED,IS_AUTHENTICATED_ANONYMOUSLY"/>

Надеюсь, это поможет (я не пробовал это)

...