为SPA前端配置Spring Boot

时间:2016-11-23 16:08:04

标签: java angularjs spring gulp single-page-application

我有整个前端部分在资源中铺设的应用程序。我想将事情分开。并且具有用于UI的单独服务器,例如由gulp提供。

因此我假设我的服务器应该为客户端呈现的所有请求返回index.html

例如:我有'user /: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);
    } 

3 个答案:

答案 0 :(得分:13)

对于路由,根据this guide at Using "Natural" Routes(特别是here),您必须添加执行以下操作的控制器:

index.html

然后使用Spring Boot,/加载private SolidColorBrush _backgroundColor = new SolidColorBrush(Colors.Yellow); public SolidColorBrush BackgroundColor { get { return _backgroundColor; } set { _backgroundColor= value; OnPropertyChanged(); } } ,并且可以加载资源;路线由Angular处理。

答案 1 :(得分:2)

如果你使用Angular和Spring Data Rest,我认为最直接的方法是使用角度哈希位置策略。

将它放在app模块的providers数组中:

{ provide: LocationStrategy, useClass: HashLocationStrategy }

显然,导入它。

答案 2 :(得分:0)

EpicPandaForce有一个很好的答案,我想对其进行扩展。以下端点也将允许在嵌套路由上进行匹配。如果您希望拥有一个admin部分,则可以对其进行配置以返回不同的index.html。

@Controller
class PageController {

    @GetMapping("/**/{path:[^\\.]*}")
    fun forward(request: HttpServletRequest): String? {
        if(request.requestURI.startsWith("/admin")) {
            return "forward:/admin/index.html"
        }
        return "forward:/index.html"
    }
}

此RequestMapping(或@GetMapping)的工作方式是排除任何包含句点(即“ index.html”)的请求。