문제

HTTP를 사용하여 페이지를 요청한 사용자에게 보안 HTTPS 버전을 사용하도록 강요 할 수있는 방법이 궁금하십니까?

나는 Application Server로 WebSphere 6.1을 사용하고 RAD 7을 개발 환경으로 사용하고 있습니다.

감사합니다 Damien

도움이 되었습니까?

해결책

서버 구성보다는 응용 프로그램 내 에서이 작업을 수행 할 수있는 한 가지 방법은 필터 (web.xml에 지정 됨) 확인하려면 확인하십시오 ServletRequest.getScheme() "http"또는 "https"이고 사용자를 적절한 URL로 다시 지시합니다 (사용 HttpServletResponse.sendRedirect(String url)).

다른 팁

web.xml에 다음 항목을 추가 할 수 있으며 모든 요청이 https로 변환되도록합니다.

<!--********************************
   *** SSL Security Constraint  ***
   *****************************-->
   <security-constraint>
       <web-resource-collection>
           <web-resource-name>SSL</web-resource-name>
           <url-pattern>/*</url-pattern>
       </web-resource-collection>
       <user-data-constraint>
           <transport-guarantee>CONFIDENTIAL</transport-guarantee>
       </user-data-constraint>
   </security-constraint>

<!--********************************* -->

WebSphere는 완전한 HTTP 서버가 아닙니다. HTTP 서버처럼 작동하는 '운송 체인'이 있습니다.

일반적으로 HTTP 서버를 앞에 배치합니다. IBM은 가볍게 수정 된 Apache HTTP 서버 인 IHS (IBM HTTP 서버)를 제공합니다. HTTP 서버는 httpd.conf 파일로 구성됩니다. HTTP 요청이 HTTP로 리디렉션되는 방식으로 리디렉션을 추가합니다.

아마도 인프라에 대한 자세한 정보를 줄 수 있습니다.

동의한다. 필터를 사용하면 이것을 달성 할 것이라고 생각합니다. 다음은로드 밸런싱 및 포트 리디렉션을 위해 작성한 필터는 다음과 같습니다. 그러나 귀하의 요구에 맞게 편집하는 방법을 쉽게 찾을 수 있어야합니다.

공개 클래스 요청 wrapperFilter는 필터 {

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

    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;

    String requestWrapperClassName = (String) (httpRequest
            .getAttribute(LoadBalancerRequestWrapper.class.getName()));

    String initiatingServerName = httpRequest.getServerName();

    if (requestWrapperClassName == null
            && initiatingServerName.equals(loadBalancerHostName)) {

        httpRequest = new LoadBalancerRequestWrapper(AuthenticationUtil
                .getHttpServletRequest(httpRequest));
    }

    filterChain.doFilter(httpRequest, httpResponse);
}

}

/**
 * The custom implementation of the request wrapper. It simply overrides the
 * getScheme() and getServerPort() methods to perform the redirect
 * filtering.
 * 
 * 
 */
private static class LoadBalancerRequestWrapper extends
        HttpServletRequestWrapper {

    /**
     * Default Constructor. Simply declares the Wrapper as injected.
     * 
     * @param httpServletRequest
     *            the app-server HttpServletRequest.
     * 
     */
    public LoadBalancerRequestWrapper(HttpServletRequest httpServletRequest) {
        super(httpServletRequest);
    }

    /**
     * The overridden scheme.
     * 
     */
    public final String getScheme() {
        if (loadBalancerHttpScheme.equals(EMPTY_STRING)) {
            return super.getScheme();
        }

        return loadBalancerHttpScheme;
    }
}

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top