https下sendRedirect或redirect重定向到http加443端口导致错误的解决办法

在给网站增加https之后,发现了一个重定向的问题。

网站架构:nginx做代理,应用端使用docker做一个个不同的后端服务。在nginx层安装ssl证书。

问题:在https下访问网站https://www.3kkg.com/admin如果这时候没有登陆,则会重定向到登录页面即https://www.3kkg.com/login,但是目前的问题是,跳转到了http加端口的地址即http://www.3kkg.com:443/admin这个时候使用的是http协议,但是又指定了443端口。结果直接报错。

解决办法:

一:直接使用forward的形式跳转

缺点:改变业务,不太建议。

二:重定向代码修改成如下形式:

httpServletResponse.setStatus(302);
httpServletResponse.setHeader("location", httpServletRequest.getContextPath()+"/login")

三:使用spring mvc实现的重定向即:"redirect:/login"仍然会失败

这个时候需要修改mvc的配置把viewResolverredirectHttp10Compatible值改为false

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  <property name="prefix" value="/" />  
  <property name="suffix" value=".jsp" />  
  <property name="redirectHttp10Compatible" value="false" />  
</bean>

但是我使用的是springboot+jfinal的enjoy作为视图模板。在yml文件中找不到这个配置,于是只能从代码端解决。一下是enjoy的代码段配置(有删减)

@Configuration
public class EnjoyConfig {

    @Bean
    public JFinalViewResolver jFinalViewResolver() {
        JFinalViewResolver jfr = new JFinalViewResolver();
        jfr.setSessionInView(true);
        jfr.setRedirectHttp10Compatible(false);
        return jfr;
    }

}

使用综上3种方法配合使用,问题解决。

参考资料:

https://blog.csdn.net/zhuye1992/article/details/80496151

https://blog.csdn.net/successli1994/article/details/82658176

支付宝搜索:344355 领取随机红包

如果文章对您有帮助,欢迎给作者打赏