У меня есть единственный метод, который я хочу разрешить как анонимный, так и аутентифицированный доступ.
Я использую Spring Security 3.2.4 с настройкой на основе java.
Переопределенный метод configure (в моем настраиваемом классе конфигурации, расширяющий WebSecurityConfigurerAdapter) имеет следующий http-блок:
http
.addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class)
.addFilterBefore(cf, ChannelProcessingFilter.class)
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.authorizeRequests()
.antMatchers("/ping**")
.permitAll()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login");
Обработчик и метод запроса ping находится в контроллере, который также содержит обработчик входа, и он не имеет отдельного @PreAuthorize или других аннотаций, которые могут вызвать проблему.
Проблема в том, что анонимный доступ запрещен и пользователь перенаправляется на страницу входа.
Запись на уровне отладки, я вижу следующую обратную связь от Spring Безопасность:
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Secure object: FilterInvocation: URL: /ping; Attributes: [authenticated]
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Previously Authenticated: org.sprin[email protected]6faad796: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]ffffa64e: RemoteIpAddress: 192.168.2.128; SessionId: 0EF6B13BBA5F00C020FF9C35A6E3FBA9; Granted Authorities: ROLE_ANONYMOUS
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.access.vote.AffirmativeBased] Voter: org.sp[email protected]123f2882, returned: -1
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.ExceptionTranslationFilter] Access is denied (user is anonymous); redirecting to authentication entry point
Я пытаюсь выполнить метод, который можно вызвать в любой момент и который отправит ответ, указывающий, находится ли запрос внутри сеанса входа в систему.