Spring-Boot 2.1.4. Выпуск + Angular 6 (два автономных приложения).
У меня есть и пользовательский интерфейс, и API, развернутые на PCF. Мы используем пользовательский SSO (поток auth_code), который привязан к серверу API PCF в качестве посредника служб.
В приложении Angular UI есть прокси и локальный прокси для запуска на PCF или localhost API соответственно. Когда я запускаю оба приложения локально или на PCF, проблем не возникает, но когда я указываю свой локальный пользовательский интерфейс на PCF API, я получаю 403.
Перенаправление пользователя на единый вход в систему обрабатывается на пользовательском интерфейсе! Так что autoMagicConfiguration при весенней загрузке отключена. По сути, я вручную вызываю / авторизую, / token & / userinfo enpdoints и затем устанавливаю принципала в SecurityContext.
@Configuration
@EnableWebSecurity
@Order(value = 0)
public class SsoConfiguration extends WebSecurityConfigurerAdapter {
@Bean
@Order(0)
public RequestContextListener requestContextListener() {
return new RequestContextListener();
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers(Constants.AUTH_WHITELIST)
.permitAll()
.anyRequest()
.authenticated();
}
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers(Constants.SWAGGER_WHITELIST);
}
}
LoginService
public CustomUser login(LoginRequest request) throws JSONException {
ServiceConfiguration configuration =
cacheService.getConfigurations(Enums.ServiceName.SSO);
String token = getToken(configuration, request);
CustomUser user = userRepository.getUser(configuration, token);
cacheService.getCachedUser(user);
Authentication authentication =
new UsernamePasswordAuthenticationToken(user, null,
user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
return user;
}
public void logout(HttpServletRequest request, HttpServletResponse response)
{
Authentication authentication =
SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
new SecurityContextLogoutHandler().logout(request, response,
authentication);
cacheService.clearCachedUser((CustomUser )
authentication.getPrincipal());
}
}
LoginRequest содержит authCode и получен из SSOвход в систему и перенаправление uri для последующих вызовов (/ token & / userinfo)
CustomUser реализует UserDetails вместе с другими полями, возвращаемыми SSO
Вот снимки экрана вызовов для защищенных конечных точек из UI => API: 1) PCF в PCF.
2) Localhost to Localhost.
3) Локальный хост для PCF
Вот прокси на пользовательском интерфейсе
Метод Post / Get, используемый пользовательским интерфейсом httpClient
Мы используем Redis для кэширования, и я заметил, что когда я захожу на сайт, он добавляет сеанс в Redis. Сеанс не удаляется при выходе из системы, если только я вручную не очистил Redis или не вызвал
@CacheEvict(cacheNames = "my-cache", allEntries = true)
Я попытался отключить сеанс Redis с помощью 
, но, похоже,в любом случае установить сеанс в Redis. 
Может ли это быть из-за сеанса?