2016-12-12 12 views
0

У меня есть одно приложение для загрузки весны, которое содержит весеннюю безопасность с добавлением formLogin и пользовательской учетной записи. Всякий раз, когда я получаю аутентификацию, он отправляет меня на defaultSuccessUrl, который является/app/dashboard, и отправляет с помощью схемы http. Я пробовал весь день, чтобы просто сделать схему successUrl https, просто изменив некоторые изменения в application.properties и иногда с Bean, но я до сих пор не могу этого сделать. Мое приложение находится в cloudfoundry, и у меня нет порта 80, но только 443 (https).Принудительное подключение Https во время весеннего входа в систему безопасности для входа в систему

Моя конфигурация весной, как это:

http 
    .authorizeRequests() 
    .antMatchers("/", "/forbidden", "/index.html", "/webjars/*", "/app.js", "/access/*", "/signup", "/l10n/*.js", "/", "/tpl/**/*.html", "/fonts/**/*.woff").permitAll() 
    .anyRequest().authenticated() 

    .and().addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class). 
    csrf().csrfTokenRepository(repo) 

    .and() .httpBasic().disable() 
    .formLogin() 
    .loginPage("/access/signin").permitAll() 
    .failureUrl("/error") 
    .defaultSuccessUrl("/app/dashboard") 
    .and().logout() 
    .logoutRequestMatcher(new AntPathRequestMatcher("access/logout")) 
    .logoutSuccessUrl("/access/signin").permitAll(); 

Я также пытался использовать абсолютный URL с HTTPS, но он не работает хорошо.

ответ

2

Вы попробовали requiresChannel() и requiresSecure()? Для частности URL должны быть доступны через HTTPS, вы можете попробовать

.defaultSuccessUrl("/app/dashboard").and().requiresChannel().antMatchers("/app/dashboard").requiresSecure() 

Для всех запросов, чтобы пройти через HTTPS, вы можете использовать как

.and().requiresChannel().anyRequest().requiresSecure() 

Вы можете использовать переадресацию портов, как показано ниже.

http 
    .portMapper()    
     .http(8080).mapsTo(443); 

Пожалуйста, обратитесь this и this для более подробной информации.

+0

На самом деле я использую predix, который является еще одной версией облачного литейного производства. Я применил приложение весенней загрузки с requireChannel(). AnyRequest(). RequireSecure(), но у него есть _redirect loops_. После перемещения глубоко в журнал я увидел, что мой кот порт работает в ** 64143 ** 'Запуск Servlet Engine: Apache Tomcat/8.0.32'
' Начиная ProtocolHandler [ "HTTP-NiO-64143"] '' Используя общий селектор для сервлета записи/read' 'Tomcat начал порт (ы): 64143 (HTTP)' ' Обновление порта для 64143' это означает, что cloudfoundry является отображение HTTPS к ** 64143 ** порт. – privatejava

+0

Если вы не предоставите «http.portMapper», тогда «requireSecure()» будет использовать по умолчанию настроенный порт https. Поэтому, если tomcat работает на 8080, то с помощью requireSecure() он будет использовать порт 8443 для https. Проверьте, какая конфигурация (с или без portMapper) работает для вас. – abaghel

+0

Даже добавление portmapper() не помогло. Весенняя загрузка позади прокси, я думаю, потому что даже он работает в другом порту, он отображает из одного облачного uri с защищенным https. 'https: // ====>: ' – privatejava