heroku : 스프링 부트는 https로만 엔드 포인트에 액세스합니다.

fenrirx22

Heroku에 Spring Boot Java 앱이 배포되어 있습니다. 내 등록 엔드 포인트가 https로만 액세스 할 수 있는지 확인하고 싶습니다. 지금까지 내가 알고있는 heroku는 특수 헤더 (X-forwarded-porto)를 사용하여 모든 https 연결을 http로 리디렉션하는로드 밸런서를 사용합니다. Iam 사용

compile("org.springframework.boot:spring-boot-starter-security")

암호화 도구 (해싱 암호). "security.basic.enable"속성을 false로 설정했습니다 (실제로이 경우에 중요한지 모르겠습니다.).

이미 다음 설정을 시도했습니다.

tomcat:
  remote_ip_header: x-forwarded-for
  protocol_header: x-forwarded-proto

내 application.yml에서

문제는 실제로 https 링크를 통해서만 엔드 포인트를 사용하도록 강제 할 수있는 방법입니다. http의 경우 404 등을 반환 할 수 있습니다. 나는 gradle을 사용하고 있으며 그것을 사용하는 참조를 찾기가 다소 어렵습니다. Google에서 찾은 몇 가지를 시도했지만 작동하지 않았습니다 (또는 올바르게 구현하는 방법을 모르겠습니다 ...). 우편 배달부를 통해 http를 통해 내 엔드 포인트에 액세스 할 수 있습니다. 지금은 다음과 같습니다.

@Controller
@RequestMapping("/users")
public class AccountController {
    @Autowired
    private AccountRepository accountDao;

    @RequestMapping(value = "/register", method = RequestMethod.POST, consumes = "application/json")
    public ResponseEntity<Resource<Account>> createAccount(@RequestBody @Valid Account account) { ... }
fenrirx22

실제로 나는이 repo https://github.com/fenrirx22/springmvc-https-enforcer 에서 해결책을 찾았습니다 .

2 개의 클래스 생성 :

@Configuration
public class ApiConfig {
    @Bean
    public Filter httpsEnforcerFilter(){
        return new HttpsEnforcer();
    }
}

과:

public class HttpsEnforcer implements Filter {

    private FilterConfig filterConfig;

    public static final String X_FORWARDED_PROTO = "x-forwarded-proto";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        if (request.getHeader(X_FORWARDED_PROTO) != null) {
            if (request.getHeader(X_FORWARDED_PROTO).indexOf("https") != 0) {
                response.sendRedirect("https://" + request.getServerName() + request.getPathInfo());
                return;
            }
        }

        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // nothing
    }
}

매력처럼 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

스프링 부트 액추에이터 : 일부 엔드 포인트 만 작동

스프링 부트의 로그 파일 엔드 포인트

스프링 부트 엔드 포인트 경로

스프링 부트: 하나의 엔드포인트에 데이터를 보내지만 다른 엔드포인트에는 숨김

Heroku / Node / React-Heroku에서 내 노드 API 엔드 포인트에 액세스하는 방법

kubernetes 포드에서 스프링 부트 컨트롤러 엔드 포인트에 액세스

스프링 부트 액추에이터 상태 엔드 포인트 + 동적 resilience4j 회로 차단기

Heroku로 풀스택 앱 배포 - Express 백엔드, React 프론트엔드?

스프링 부트 액츄에이터 - 커스텀 엔드포인트

백엔드 렌더링 된 프런트 엔드 경로에 액세스하는 사용자가 인증되었는지 어떻게 확인해야합니까?

스프링 통합: 메시지가 생산자 엔드포인트에서 소비자 엔드포인트로 전달되지 않습니다.

HealthIndicator 메소드에 엔드 포인트로 액세스 할 수 있습니까?

스프링 부트는 요청이 엔드포인트로 들어오지만 404 상태를 제공합니다.

스프링 부트 액추에이터 상태 엔드 포인트

1.5.x에서 2.3.x로 스프링부트 업그레이드 후 이전 액추에이터 엔드포인트를 유지하는 방법

스프링 부트로 런타임에 엔드 포인트 활성화 및 비활성화

스프링 부트 및 oauth2로 엔드 포인트를 노출하는 방법

JAX-WS 엔드 포인트는 부분적으로 만 XML 문자열을 이스케이프합니다.

스프링 부트를 통해 https REST 엔드 포인트를 호출 할 수 없습니다.

Google Cloud Run API - 내부적으로 엔드포인트에 액세스

XML 페이로드가있는 최소 스프링 WS (2.4.0) 엔드 포인트

Angular 10-엔드 포인트 액세스는 우편 배달부에서 작동하지만 Angular에서는 작동하지 않습니다.

스프링 부트. 누락 된 / logfile 엔드 포인트

웹 사이트가 배포될 때 클라이언트 URL에 액세스하는 동안 "...에서 수신하는 엔드포인트가 없습니다." 오류가 발생하지만 dev에서는 제대로 작동합니다.

스프링 부트 및 스프링 데이터로 엔티티 관리자에 액세스하는 방법

/ info 엔드 포인트의 데이터는 스프링 부트 관리자에 어디에 저장됩니까?

스프링 부트에서 템플릿 (thymeleaf)을 반환하고 특정 엔드 포인트로 해결하는 방법

어떻게 추가 프레임 워크없이에게 Heroku에 액세스 자바 웹 소켓 엔드 포인트를 배포하는 방법

Camel CXF 엔드 포인트로 원격 웹 서비스에 액세스하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관