2016-11-23 4 views
2

フロントエンド全体のリソースが配置されているアプリケーションがあります。私は物事を分けたいと思います。例えば、gulpによって提供される、UI用の別個のサーバーを用意します。SPAフロントエンド用にSpringブートを設定する

クライアント側でレンダリングされるすべての要求に対して、サーバーが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); 
    } 

答えて

7

ルーティングでは、this guide at Using "Natural" Routes(特にhere)によると、次のないコントローラを追加する必要があります:

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

その後春ブーツ、/index.htmlロードを使用して、リソースをロードすることができます。ルートはAngularで処理されます。

+0

これは、別のスラッシュが付いたURLをカバーしていません。例えば。 localhost:8080/im-covered and localhost:8080/im/not/covered – james

+1

@EpicPandaForce '{[path:[^ \\。] *}'はどういう意味ですか?それはどこから来たのですか?私は正規表現を理解して、私はSpringブートが "path"の部分をどのように扱うかを理解していません。 –

+0

@BobbyBrown残念ながら私が知っているのは、[このガイド](https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part- vii)それが働いた。 – EpicPandaForce

0

Spring Data RestでAngularを使用している場合は、角度のハッシュロケーション戦略を使用するのが最も簡単な方法だと思います。

ちょうどあなたのアプリモジュール内のプロバイダの配列でこれを置く:

{ provide: LocationStrategy, useClass: HashLocationStrategy }

と、明らかに、それをインポートします。

関連する問題