我想知道如何强制使用Http请求页面的用户使用安全的https版本?
我使用Websphere 6.1作为我的应用程序服务器,使用Rad 7作为我的开发环境
由于 达明
答案 0 :(得分:3)
您可以在应用程序而不是服务器配置中执行此操作的一种方法是使用Filter(在您的web.xml中指定)来检查ServletRequest.getScheme()
是否为“http”或“https”,并将用户重定向到相应的网址(使用HttpServletResponse.sendRedirect(String url)
)。
答案 1 :(得分: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>
<!--********************************* -->
答案 2 :(得分:0)
Websphere不是一个完整的http服务器。它确实有“Transport Chains”,它就像一个HTTP Server。
通常,您会将HTTP服务器放在前面。 IBM提供IHS(IBM HTTP Server),它是一个轻微修改的Apache HTTP Server。 HTTP Server配置了httpd.conf文件。在那里你添加重定向,以便将http请求重定向到https。
也许您可以提供一些有关您的基础架构的详细信息。
答案 3 :(得分:0)
我同意。我认为使用Filter会实现这一点。这是我为负载平衡和端口重定向编写的过滤器,但应该很容易弄清楚如何编辑它以满足您的需求。
公共类RequestWrapperFilter实现Filter {
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;
}
}
}