Search code examples
javaangularjsspringgulpsingle-page-application

Configure Spring Boot for SPA frontend


I have application where whole frontend part is laying in resource. I would like to separate things apart. And have separate server for UI, provided by gulp, for example.

So that I assume that my server should return index.html for all requests that are rendered by client side.

Eg: I have 'user/:id' rout that is managing by angular routing and doesn't need server for anything. How can I configure so that server will not reload or redirect me to anywhere?

My security config is following(don't know if it responsible for such things):

public class Application extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests().antMatchers("/", "/login**", "/webjars/**", "/app/**", "/app.js")
                .permitAll().anyRequest().authenticated().and().exceptionHandling()
                .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/")).and().logout()
                .logoutSuccessUrl("/").permitAll().and().csrf()
                .csrfTokenRepository(csrfTokenRepository()).and()
                .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
                .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
    } 

Solution

  • For routing, according to this guide at Using "Natural" Routes (specifically here), you have to add a controller that does the following:

    @Controller
    public class RouteController {
        @RequestMapping(value = "/{path:[^\\.]*}")
        public String redirect() {
            return "forward:/";
        }
    }
    

    Then using Spring Boot, the index.html loads at /, and resources can be loaded; routes are handled by Angular.