最近在开发一个项目,用的是spring boot+spring security cas,我的是cas client端,在开发过程中遇到一个问题,毫无头绪,跪求大神帮忙看下。下面是请求的过程,我项目配置的地址是https的请求,但是最后一步变成了http,SSL正式在haproxy上:
https://cas.client.com
|
https://cas.server.com/login?service=https%3A%2F%2Fcas.client.com%2Flogin
|
https://cas.client.com/login?ticket=ST-123456-SJDFSdgsdfd-js3-webapp-cas-server-com-001
|
http://cas.client.com/(最后这一步变成了http请求)
尝试过用三种方法解决:
1、在tomcat里面加ssl,请求是变成了https了,但是部署到生产报502 bad gateway;
2、spring security加配置.requiresChannel().anyRequest().requiresSecure(),但是一直报循环重定向的错误;
3、尝试重载接口来实现强制https,项目调试无法进入到重载的类。请教有人遇到过这种问题吗?你们是怎么解决的

解决方案 »

  1.   

    居然没有人我自己解决了,上源码import org.apache.catalina.connector.Connector;
    import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
    import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.beans.factory.annotation.Value;@Configuration
    public class MultiConnectionSupport {
        @Value("${server.https.port}")
        private int httpPort;
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer() {
            return new EmbeddedServletContainerCustomizer() {
                @Override
                public void customize(ConfigurableEmbeddedServletContainer container) {
                    if (container instanceof TomcatEmbeddedServletContainerFactory) {
                        TomcatEmbeddedServletContainerFactory containerFactory =
                                (TomcatEmbeddedServletContainerFactory) container;
                        Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
                        connector.setPort(httpPort);
                        connector.setScheme("https");
                        containerFactory.addAdditionalTomcatConnectors(connector);
                    }
                }
            };
        }
    }