2016-11-23 4 views
2

У меня есть приложение, в котором вся часть интерфейса находится в ресурсе. Я хотел бы разделить вещи. И у вас есть отдельный сервер для пользовательского интерфейса, предоставляемый, например, gulp.Настройка Spring Boot для SPA-интерфейса

Так что я предполагаю, что мой сервер должен вернуть index.html для всех запросов, которые отображаются на стороне клиента.

Например: у меня есть маршрут пользователя /: id, который управляется с помощью угловой маршрутизации и не нуждается ни в каком сервере. Как настроить, чтобы сервер не перезагружал или не перенаправлял меня нигде?

Моя конфигурация безопасности следующая (не знаю, если он отвечает за такие вещи):

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); 
    } 

ответ

7

для маршрутизации, в соответствии с this guide at Using "Natural" Routes (в частности here), вы должны добавить контроллер, который выполняет следующие :

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

Затем с помощью Spring загрузки, index.html нагрузки на /, и ресурсы могут быть загружены; маршруты обрабатываются Angular.

+0

Это не распространяется на URL с другой косой чертой. НАПРИМЕР. localhost: 8080/im-cover и localhost: 8080/im/not/coated – james

+1

@EpicPandaForce Что именно означает '{[путь: [^ \\.] *}' означает? От куда это? Я понимаю регулярное выражение, я не понимаю, как Spring Boot обрабатывает часть «путь». –

+0

@BobbyBrown, к сожалению, все, что я знаю, это то, что я следовал [этому руководству] (https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part- vii), и это сработало. – EpicPandaForce

0

Если вы используете Угловое с сохранением данных с пружинами, я считаю, что самый простой способ сделать это - использовать стратегию определения углового хэша.

Просто положить это в массив провайдеров в модуле приложения:

{ provide: LocationStrategy, useClass: HashLocationStrategy }

и, очевидно, импортировать его.