2016-08-31 4 views
4

У меня есть сервер приложений tomcat, который находится за nginx. SSL завершается на nginx. Приложение Spring web-mvc, развернутое на tomcat, должно установить безопасный флаг на JSESSIONID. Было бы здорово, если бы весна имела автоматическое обнаружение для этого, поэтому я не беспокоюсь во время разработки, потому что у меня нет SSL.Добавить безопасный флаг в файл cookie JSESSIONID весной автоматически

Есть ли способ сказать весне, чтобы установить флаг автоматически?

Я использую JavaConfig для настройки приложения и использования Maven для создания развернутого военного файла.

Я проверил это уже, но это выглядит как-то некрасиво и статические: set 'secure' flag to JSESSION id cookie

ответ

5

При использовании spring-session, например, для сохранения вашей сессии в reddis, это действительно делается автоматически. Куки, чем созданный org.springframework.session.web.http.CookieHttpSessionStrategy который в CookieHttpSessionStrategy проверки # createSessionCookie если запрос приходит через HTTPS и наборы обеспечения соответственно:

sessionCookie.setSecure(request.isSecure()); 

Если вы не использования Spring-session, вы можете настроить безопасные файлы cookie с помощью ServletContextInitializer. Используйте application property, чтобы установить его значение true/false в зависимости от профиля.

@Bean 
public ServletContextInitializer servletContextInitializer(@Value("${secure.cookie}") boolean secure) { 
    return new ServletContextInitializer() { 

     @Override 
     public void onStartup(ServletContext servletContext) throws ServletException { 
      servletContext.getSessionCookieConfig().setSecure(secure); 
     } 
    }; 
} 

application.properties (используемый в разработчика, когда профиль 'Prod' не активен):

secure.cookie=false 

application-prod.properties (используется только, когда профиль 'Prod' активен, переписывает значение в application.properties):

secure.cookie=false 

запустить приложение на сервере прод с:

--spring.profiles.active=prod 

Похоже на какое-то усилие, если вы пока не работали с профилями, но вам, скорее всего, понадобится профиль для prod-среды, поэтому его действительно стоит.

+0

CookieHttpSessionStrategy упоминает, что безопасный флаг добавляется автоматически, когда HttpServletRequest # isSecure() возвращает значение true. Как этот метод определяет, что запрос действительно отправляется через https, если ssl завершается на nginx, а не на tomcat? Или наоборот, как я могу сказать, что запрос был зашифрован в какой-то момент? –

+0

Как правило, ваш заголовок запроса ssl terminator задает значение 'x-forwarded-proto = https', а ваш веб-сервер может использовать его для отметки запроса как isSecure. –

+0

Настройка secure.cookie на true/false, похоже, ничего не делает для нас. Перед этим мы используем nginx и aws loadbalancer, поэтому нам нужно как-то закрепить это. Есть ли способ заставить это быть включенным? –

Смежные вопросы