WebSphere 6.1에서 HTTPS를 강제로합니다
문제
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;
}
}
}