0

I have a back-end which is build on spring-boot and then some custom code from my school built upon that. The front-end is pure angular application which I serve from a different server trough a gulp serve. They're only connected by REST calls.

There's already an authentication module running on the backend and to now I need to serve this angular application from the same tomcat server the back-end is running on so it can also use this authentication module.

I've found this about multiple connectors so I copied it as following class to set up multiple connectors:

@ConfigurationProperties
public class TomcatConfiguration {

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        //tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }

    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File keystore = new ClassPathResource("keystore").getFile();
            File truststore = new ClassPathResource("keystore").getFile();
            connector.setScheme("https");
            connector.setSecure(true);
            connector.setPort(8443);
            protocol.setSSLEnabled(true);
            protocol.setKeystoreFile(keystore.getAbsolutePath());
            protocol.setKeystorePass("changeit");
            protocol.setTruststoreFile(truststore.getAbsolutePath());
            protocol.setTruststorePass("changeit");
            protocol.setKeyAlias("apitester");
            return connector;
        } catch (IOException ex) {
            throw new IllegalStateException("can't access keystore: [" + "keystore"
                    + "] or truststore: [" + "keystore" + "]", ex);
        }
    }
}

Problem is that I don't see or find how I should setup these connectors so they serve from my angularJS build folder.

Upon searching I came upon Spring-Boot : How can I add tomcat connectors to bind to controller but I'm not sure if in that solution I should change my current application or make a parent application for both applications.

My current application main looks like this:

@Configuration
@ComponentScan({"be.ugent.lca","be.ugent.sherpa.configuration"})
@EnableAutoConfiguration
@EnableSpringDataWebSupport
public class Application extends SpringBootServletInitializer{
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }
}

If possible I'd like some more info about what connectors are in the spring-boot context. If this is not the way to go I'd like someone to be able to conform this second solution or suggest a change in my code.

I'm really not sure enough about these solution that I want to go breaking my application over it. (though it's backed up with github)

Community
  • 1
  • 1
turoni
  • 1,345
  • 1
  • 18
  • 37

1 Answers1

1

Just place your AngularJS + other front-end assets into src/main/resources/static folder, Spring Boot will serve them automatically.

luboskrnac
  • 23,973
  • 10
  • 81
  • 92
  • Thank you, this helped me forward in the right direction. I've encountered some specific problems implementing this but I think it's better to open a new question for that. – turoni Oct 19 '16 at 11:48