[SPRING] heroku : https 만있는 엔드 포인트에 대한 봄 부팅 액세스
SPRINGheroku : https 만있는 엔드 포인트에 대한 봄 부팅 액세스
나는 heroku에 전개 된 스프링 부트 자바 애플리케이션을 가지고있다. 내 등록 엔드 포인트에 https에서만 액세스 할 수 있는지 확인하고 싶습니다. 지금까지 내가 알고 있듯이 heroku는 모든 https 연결을 특수 헤더 (X-forwarded-porto)로 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 또는 뭔가를 반환 할 수 있습니다. 나는 그것을 사용하여 어떤 refference를 찾기 위해 열심히하고 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) { ... }
해결법
-
==============================
1.사실이 Repo https://github.com/fenrirx22/springmvc-https-enforcer에서 해결책을 찾았습니다.
사실이 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 } }
매력처럼 작동합니다.
from https://stackoverflow.com/questions/36308813/heroku-spring-boot-acces-to-endpoints-with-https-only by cc-by-sa and MIT license