我们有一个可以通过http和https
访问的网站我们需要使用http来访问所有页面,这样可以正常工作但是当用户登录到站点时,我们需要所有经过身份验证的页面都需要使用https显示
请告知我们实现此目标的最简单方法
由于 SRINIVAS
答案 0 :(得分:10)
您可以使用过滤器:
public class MyFilter implements Filter {
private FilterConfig conf;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
if (req.getRemoteUser() != null && req.getScheme().equals("http")) {
String url = "https://" + req.getServerName()
+ req.getContextPath() + req.getServletPath();
if (req.getPathInfo() != null) {
url += req.getPathInfo();
}
resp.sendRedirect(url);
} else {
chain.doFilter(request, response);
}
}
public FilterConfig getFilterConfig() {
return conf;
}
public void setFilterConfig(FilterConfig filterConfig) {
conf = filterConfig;
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
conf = filterConfig;
}
}
答案 1 :(得分:1)
这是我在Jetty上的Scala解决方案(我使用Jetty独立,没有WAR)。
class RedirectHandler extends ContextHandler {
override def doHandle(target: String, baseRequest: Request,
request: HttpServletRequest, response: HttpServletResponse): Unit = {
if ("http" == request.getScheme.toLowerCase) {
baseRequest setHandled true
response sendRedirect s"https://${request.getServerName}${request.getContextPath}"
}
}
}
在端口80,8080和c上向服务器添加连接器。 将此处理程序添加到处理程序链的前面。
答案 2 :(得分:0)
您可以使用Apache轻松实现这一目标。
假设您已将用户内容嵌套在“受保护”路径中,这会将每个以“/ protected”开头的请求转发到您的HTTPS主机:
# HTTP redirect configuration
<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/protected/ https://hostname/ [R]
</VirtualHost>
使用这种方法,URI的其余部分将丢失,用户应该再次导航到他们想去的地方。
答案 3 :(得分:0)
检查用户是否已登录,然后检查连接是否为HTTPS。
if (checkIfUserIsLoggedIn) {
$val = ((@$_SERVER['SERVER_PORT_SECURE'] == 1) || (@$_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://';
if ($val == 'http://') {
// reload page if it not https
header('Location: https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
}
}
答案 4 :(得分:-1)
魔术。
开玩笑。
您可以在检查用户是否已登录的每个页面上运行某种例程,对吗?好吧,只需在该例程中添加一些逻辑,该例程还检查当前URL并重定向到https版本(如果您还没有)。
if current url is not https:
redirect to replace(current url, 'http://', 'https://')