
HTTPS는 HyperText Transfer Protocol Secure의 약자이다. 이는 웹에서 데이터를 주고받을 때 보안된 통신을 보장하는 프로토콜이다. HTTPS는 HTTP(웹 브라우저와 웹 서버 간에 데이터를 전송하는 기본 프로토콜)에 암호화와 인증 기능을 추가한 형태이다.
📌 즉, 웹사이트 주소가 http://로 시작하면 보안이 약한 상태이며, https://로 시작하면 보안이 강화된 웹사이트임을 알 수 있다.
저번 시간에 SpringBoot 프로젝트에 SSL 인증서를 발급 받아 적용하는 글을 포스팅 하였었다. 하지만 http와 https가 따로 작동하는 현상이 발생할 것이다. 이렇게 되면 사용자가 https 말고 http로 접속하게 될 경우 보안상 문제가 생길 수 있기 때문에 http로 접속해도 https로 리디렉션 되도록 SpringBoot에 적용해보자.
본인의 SpringBoot 프로젝트의 해당 경로에 Config 패키지 만들기
src/main/java/com/{본인 프로젝트명}
📌 application.java와 동일한 경로
Config 패키지 안에 클래스 파일 생성 후 해당 코드 입력하기
@Configuration
public class WebConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(createHttpConnector());
return tomcat;
}
private Connector createHttpConnector() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
Spring Boot 애플리케이션에서 Tomcat 서버를 본인에 맞게 설정하는 Java 클래스이다. @Configuration 어노테이션을 사용하여 Spring의 설정 클래스를 정의하고, 이를 통해 Tomcat 서버의 동작을 제어한다.
@Bean : 메소드를 Spring의 Bean으로 등록하여, 애플리케이션의 컨텍스트에 의해 관리한다.
postProcessContext() : Tomcat의 Context에 보안 설정을 추가하는 부분입니다.
tomcat.addAdditionalTomcatConnectors(createHttpConnector()) : HTTP와 HTTPS 두 가지 포트를 모두 활성화한다. HTTP로 요청이 오면 자동으로 HTTPS로 리다이렉트 된다.
createHttpConnector() : HTTP 커넥터결론 : "무조건 HTTPS로 가야해!"라고 강제적으로 명시해주는 코드이다.
아직 학생이라 부족한 점이 있을 수 있습니다. 댓글과 피드백은 언제든지 환영입니다!