2008-09-25 91 views
0

我想知道如何強制一個用戶請求使用Http的頁面來使用安全的https版本?Websphere 6.1中的強制Https

我使用Websphere 6.1作爲我的應用程序服務器和RAD 7作爲我的開發環境

感謝 達明

回答

3

您可以在應用程序內部而不是在服務器配置中執行此操作的一種方法是使用Filter(在web.xml中指定)來檢查ServletRequest.getScheme()是「http」還是「https」引導用戶訪問相應的URL(使用HttpServletResponse.sendRedirect(String url))。

0

的Websphere是不是一個完整的HTTP服務器。它確實有'運輸鏈',就像一個HTTP服務器。

通常你會在前面放一個HTTP服務器。 IBM提供了IHS(IBM HTTP Server),它是一個輕微修改的Apache HTTP Server。 HTTP服務器使用httpd.conf文件進行配置。在那裏,您添加重定向的方式是將http請求重定向到https。

也許你可以提供一些關於你的基礎設施的詳細信息。

0

我同意。我認爲使用過濾器將實現這一點。以下是我爲負載平衡和端口重定向編寫的過濾器,但應該很容易弄清楚如何編輯它以適合您的需求。

公共類RequestWrapperFilter實現過濾器{

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; 
    } 
} 

}

1

您可以在web.xml中添加以下內容,並會確保所有請求都被轉換to 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> 

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