본문 바로가기
FullStack/21. Java

Spring Security 80, 8080을 https로 사용한 경우

by nakanara 2024. 6. 27.
반응형

Spring Security에서 접근 제한을 통해 특정 페이지로 돌려보내는 설정을 할 수 있습니다.

우연히 Apache HTTPD - Tomcat AJP 구성을 하였는데
https 포트를 8080으로 구성하여 진행하게 되었습니다.

<!-- security.xml -->

<http>
  <intercept-url pattern="/robots.txt" access="permitAll"/>
  <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
</http>

이상하게 접근 권한이 없는 경우 302 오류로 페이지가 이동하는데 접속된 8080 포트가 아닌 8443 포트로 이동하게 되는 현상이 발생하였습니다.

테스트 과정에서 단순 페이지를 호출하여 접근 제어 없이 "/" 메인 페이지로 보낸 경우 정상적인 https-8080 포트로 이동하는데 SpringSecurity에 걸리면 https-8443으로 이동하게 되어 확인한 결과 Spring Security에서는 프로토콜을 잘못 기재된 경우를 대비하여 https 프로토콜로 접속된 것 중 80 포트로 접속되면 443으로, 8080으로 접속되면 8443으로 보내는 설정이 되어 있었습니다.

가능하면 포트를 변경하면 좋겠지만, 해당 포트 사용이 필요한 경우 설정 변경합니다.

  • PortMapperImpl : 기본 포트 설정
  public PortMapperImpl() {
      this.httpsPortMappings.put(80, 443);
      this.httpsPortMappings.put(8080, 8443);
  }

해당 클래스는 포트 설정을 할 때 기존 설정이 초기화되도록 구현되어 있습니다.

public void setPortMappings(Map<String, String> newMappings) {
    
    this.httpsPortMappings.clear();
    // ...
}

XML을 통해 http-https 포트 설정을 초기화하여 8080으로도 https 통신이 되도록 변경하였습니다.
관련한 규칙에 걸리지 않는다면 접속된 포트로 redirect 됩니다.

<http>
  <intercept-url pattern="/robots.txt" access="permitAll"/>
  <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>

  <!-- PortMapper 및 PortResolver 설정 -->
  <port-mappings>
    <port-mapping http="80" https="443"/>
  </port-mappings>
</http>
반응형