2008-09-25 6 views
0

Мне было интересно, как я могу заставить пользователя, который запросил страницу с помощью Http, использовать безопасную версию https?Force Https в Websphere 6.1

Я использую Websphere 6.1, как мой сервер приложений и Rad 7 в моей среде разработки

Благодаря Damien

ответ

3

Один из способов, которым вы могли бы сделать это в своем приложении, а не в конфигурации сервера, - использовать Filter (указанный в вашем web.xml), чтобы проверить, является ли ServletRequest.getScheme() «http» или «https», направьте пользователя на соответствующий URL-адрес (используя HttpServletResponse.sendRedirect(String url)).

0

Websphere не полный сервер HTTP. У этого есть «Транспортные Цепочки», которые действуют как HTTP-сервер.

Обычно вы ставите HTTP-сервер впереди. IBM предоставляет IHS (IBM HTTP Server), который является слегка измененным HTTP-сервером Apache. 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, и он будет убедиться, что все запросы преобразуются до 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> 

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