Я вытягиваю свои волосы. Окружающая среда - приложение JAXRS (используя Джерси) Restful, настроенное с помощью Spring Boot. Я разрабатываю уровень оркестровки, который взаимодействует с микросервисами. Уровень оркестровки использует RestTemplate для выполнения вызовов микросервисам.Отключить перенаправление весной Безопасность в Джерси Весенняя загрузка Приложение
По какой-то причине, когда код состояния уровня ошибки возвращается из службы оркестровки, Spring Security пытается отправить сообщение http://localhost:65448/error. У меня нет идеи, кто это делает. Я включил регистрацию, проследил код, просмотрел интернет и прочитал всю документацию ... Я не могу определить, какой класс пытается это сделать. Я не могу это остановить.
Вот моя весна конфигурации (заводной) для битов безопасности:
@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Inject
private UserService userService
@Inject
private StatelessAuthenticationFilter statelessAuthenticationFilter
void configure(WebSecurity web) throws Exception {
}
void configure(HttpSecurity http) throws Exception {
http
.anonymous().and()
// .servletApi().and()
.headers().cacheControl().and()
.exceptionHandling().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.rememberMe().disable()
.csrf().disable()
.formLogin().disable()
.httpBasic().disable()
.jee().disable()
.logout().disable()
//.openidLogin().disable()
.authorizeRequests()
.filterSecurityInterceptorOncePerRequest(true)
// Allow anonymous logins
.antMatchers('/security/authc').permitAll()
// All other request need to be authenticated
.anyRequest().authenticated().and()
// Custom Token based authentication based on the header previously given to the client
.addFilterAfter(statelessAuthenticationFilter, BasicAuthenticationFilter)
}
void configure(AuthenticationManagerBuilder auth) {
auth
.userDetailsService(userService)
.passwordEncoder(passwordEncoder())
}
@Bean
PasswordEncoder passwordEncoder() {
new BCryptPasswordEncoder()
}
@Bean
AuthenticationManager authenticationManagerBean() {
super.authenticationManagerBean()
}
}
Тест-код выполняет простую аутентификацию отдыха на основе путем размещения заголовка Authorization в authc конечной точке. Это работает как ожидалось, если служба оркестровки не возвращает код состояния уровня ошибки.
Вот соответствующая регистрация:
[2015-06-03 07:07:15.621] boot - 47784 INFO [qtp1012776440-21] --- LoggingFilter: 1 * Server has received a request on thread qtp1012776440-21
1 > POST http://localhost:65448/security/authc
1 > Accept: */*
1 > Accept-Encoding: gzip,deflate
1 > Authorization: bm90ZXhpc3RzOnRlc3RwYXNz
1 > Connection: keep-alive
1 > Content-Length: 0
1 > Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
1 > Host: localhost:65448
1 > User-Agent: Apache-HttpClient/4.2.1 (java 1.5)
[2015-06-03 07:07:15.753] boot - 47784 INFO [qtp1012776440-21] --- LoggingFilter: 1 * Server responded with a response on thread qtp1012776440-21
1 < 400
[2015-06-03 07:07:15.757] boot - 47784 INFO [qtp1012776440-21] --- LoggingFilter: 2 * Server has received a request on thread qtp1012776440-21
2 > POST http://localhost:65448/error
2 > Accept: */*
2 > Accept-Encoding: gzip,deflate
2 > Authorization: bm90ZXhpc3RzOnRlc3RwYXNz
2 > Connection: keep-alive
2 > Content-Length: 0
2 > Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
2 > Host: localhost:65448
2 > User-Agent: Apache-HttpClient/4.2.1 (java 1.5)
[2015-06-03 07:07:15.781] boot - 47784 INFO [qtp1012776440-21] --- LoggingFilter: 2 * Server responded with a response on thread qtp1012776440-21
2 < 404
2 < Content-Type: application/json
HTTP/1.1 404 Not Found
Date: Wed, 03 Jun 2015 11:07:15 GMT
Pragma: no-cache
X-Application-Context: Test:test:0
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(9.2.9.v20150224)
Пожалуйста, помогите, прежде чем я бросить компьютер в окно.
Приветствия
Это, как представляется, имеет какое-то отношение к RestTemplate, который используется для общения с микросервисом. Это совершенно неожиданно. Я добавил регистрацию непосредственно после вызова restTemplate.getForEntity, и он никогда ничего не выводит. Почему клиент, ориентированный на отдых, выполняет перенаправление на статусы 40X/50X? Это не особенно успокаивает. – Todd
Ничего. Это предыдущее утверждение неверно. – Todd