SpringBootでHTMLページが見つかりません

AndreasGloeckner

フロントエンドにスプリングブーツとアンギュラーを使用しています。サービスから直接リダイレクトしたい場合があります。.html、.css、およびスクリプトファイルのみを使用しています(.jspは使用していません)。

これはreturn "static/pages/savepassword.html";私がsavepasswordにリダイレクトしようとした方法です

では、最初の質問は、この場合、どのように適切にリダイレクトするのですか?

次に、Springは私のhtmlファイルを見つけられません。私はこの構造を持っています

ここに画像の説明を入力してください

Springは「static」内のすべての静的ファイルを自動的に検出するはずだと読みましたが、そうではありません。そこで、ViewControllerRegistryとRessourceControllerRegistryを構成しようとしました

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
//      registry.addResourceHandler("/stylesheets/**").addResourceLocations("/stylesheets/");
//      registry.addResourceHandler("/scripts/**").addResourceLocations("/scripts/");
//      registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addViewController("/savePassword").setViewName("static/pages/savePassword.html");
        registry.addViewController("/login").setViewName("static/pages/login.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }

「static / pages / login.html」を直接呼び出すと、機能します。「/ login」を呼び出したい場合、404と表示されます。2番目の質問:何を構成する必要があり、何を構成しないのですか?

更新-1:春のセキュリティ

http
            .authorizeRequests().antMatchers("/login", "/logout", "/user/**").permitAll()
            .anyRequest().authenticated()
        .and()
            .exceptionHandling()
            .accessDeniedHandler(new CustomAccessDeniedHandler())
            .authenticationEntryPoint(new CustomAuthenticationEntryPoint())
        .and()
            .requiresChannel()
            .anyRequest().requiresSecure()
        .and()
            .csrf()
            .disable()
            //.csrfTokenRepository(csrfTokenRepository())
            .addFilterBefore(new MDCFilter(), ExceptionTranslationFilter.class)
            // .addFilterBefore(new CorsFilter(),// ChannelProcessingFilter.class)
            //.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
            .formLogin()
            .successHandler(new CustomSuccessAuthenticationHandler())
            .failureHandler(new CustomFailureHandler())
            .loginPage("/login").permitAll();

UPDATE-2構造を更新しましたが、/ loginからカスタムログインへのリダイレクトに問題があります。ここに画像の説明を入力してください

UPDATE-3 Bob Shieldsによる2番目のコメントを確認しました:https//spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot次のことを行いました。

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addViewController("/savepassword").setViewName("savepassword.html");
        registry.addViewController("/login").setViewName("login.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }

/ loginを使用すると再帰的な問題が発生するため、.htmlを設定しました。この設定で、/ loginと入力すると、/ templates / login.htmlが呼び出されます(savepassword.htmlについても同じです)。

今、私は私のcss / jsをhtmlに含める方法を知りたいです

<link rel="stylesheet" type="text/css" href="..resources/stylesheets/bootstrap.min.css" />
    <script src="..resources/scripts/angular.min.js"></script>
    <script src="..resources/scripts/login.js"></script>

This doesn't work...but I cann call my scripts directly with /scripts/login.js.

AndreasGloeckner

Ok, now I totally got it. I try to be specific as possible.

My final structure

構造

1. Static Ressources

Spring has some default configuration where you can put your static ressources without configure it. You need to create those folders in src/main/resources

  • /META-INF/resources/
  • resources (yes, an additional resources folder in src/main/resources
  • static
  • public

Have a look here in Spring Doku. For an example, check the 2nd comment by Bob Shields:

After creating a bunch of "findme.txt" files, each of which had different "source-relative" path string inside, I found that the following locations can be fetched with "http://host/findme.txt" are:

src/main/resources/public/findme.txt

src/main/resources/static/findme.txt

src/main/resources/resources/findme.txt - (yes, resources^2!)

src/main/resources/findme.txt - not found!!

I placed my folder "scripts" and "stylesheets" in the static folder. When I want to include files from these folders in html, the source looks like src="scripts/file.js"because the files and folders in staticare found directly rooted to host/scripts/file.js

No ResourceHandlerRegistry was necessary for me!

2. View Controller

I wanted to root my login.html to /login, savepassword.html to /savepassword and my index.html to /. Here is what I did:

registry.addViewController("/savepassword").setViewName("savepassword.html");
registry.addViewController("/login").setViewName("login.html");
registry.addViewController("/").setViewName("loggedin/index.html");

I set *.html because otherwise I had a problem that spring didn't know to differ between /login and the login(.html). As you can see I placed the index.html in a different folder called "loggedin". This folder is right in my public-folder (found by Spring, see 1.). Why do I do this? Have a look at 3.

3. Spring Security

.authorizeRequests().antMatchers("/stylesheets/**", "/scripts/**","/login", "/user/**").permitAll()
...omitted further configuration...
.loginPage("/login").permitAll();

First, I want that a user always has to be logged in before he can visit any other sites. So all ressources for loginpage must be available.

This piece of code makes every file in stylesheets and scripts accessible. Remember stylesheets and scripts-folder are placed in static. I had to set "/login" because of the custom loginpage. Honestly I thought that the .loginPage("/login").permitAll();would grant access, but it doesn't. Without it Spring tries to access the "/login", but can't cause of no rights and then automatically redirects to login => ERR_TOO_MANDY_REDIRECTS. "/user/**" is just for some of my services that every user can use.

As you can see, I don't give access to "loggedin"-folder, so that every visitor can enter files in "loggedin" only if he is loggedin ;)

4. Redirecting

コントローラー全体を@ResponseBodyを実装する@RequestControllerでマークしました。returnのような文字列を返すと"redirect:/savepassword";、SpringはこれをResponseBodyとして設定し、String / JSON(?)として解釈されます。

コントローラを@Controllerとしてマークし、jsonまたはsthを返す必要があるすべてのサービスに@ResponseBodyを設定する必要がありました。リダイレクトするサービスは、@ RequestMappingとmethod = RequestMethod.GETでのみマークされていました。最後に、次のような文字列を返しますreturn "redirect:/savepassword";。Springは/ savepasswordにリダイレクトされsrc/main/resources/public/savepassword.htmlます。これは、実際にはに配置されます。

最後に、それは機能し、Springがファイルをどのように提供するかを見つけるのは十分に困難でした。私はそれが誰か他の人に役立つことを願っています:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

requests-htmlページ要素が見つかりません

分類Dev

codeigniterでページが見つかりませんエラー

分類Dev

Google Chrome Webページで要素が見つかりません

分類Dev

SeleniumのWebページで要素が見つかりません

分類Dev

Djangoでページが見つかりません

分類Dev

APIでページが見つかりません

分類Dev

Ajaxでページが見つかりません(404)

分類Dev

パグ(翡翠)ベースHTMLページ:要素が見つかりません:#app

分類Dev

Spring Bootプロジェクトでページが見つかりません

分類Dev

codeigniterでエラー「404ページが見つかりません」

分類Dev

WordPressでエラー404ページが見つかりません

分類Dev

djangoでページが見つかりません(404)エラー

分類Dev

ページ上のデータが見つかりません

分類Dev

SpringFrameworkのエラーページが見つかりません

分類Dev

Django 2.0.5404エラー-ページが見つかりません

分類Dev

codeigniterでページ付けが機能せず、404ページが見つかりません

分類Dev

Djangoサイトでページが見つかりません404?

分類Dev

Microsoftサインインページで要素が見つかりません

分類Dev

春のmvcの例で404ページが見つかりません

分類Dev

Djangoサイトでページが見つかりません404

分類Dev

Laravelプロダクションでページが見つかりません

分類Dev

Micronaut 1.3.5:ページが見つかりません

分類Dev

GAE Golang Gorillamux-404ページが見つかりません

分類Dev

変数が見つかりません:PhantomJSのページ

分類Dev

influxdb python:404ページが見つかりません

分類Dev

Herokuアプリページが見つかりません

分類Dev

GitHubページがGoogleに見つかりません

分類Dev

TFS-APIページが見つかりません

分類Dev

Django404ページが見つかりません

Related 関連記事

  1. 1

    requests-htmlページ要素が見つかりません

  2. 2

    codeigniterでページが見つかりませんエラー

  3. 3

    Google Chrome Webページで要素が見つかりません

  4. 4

    SeleniumのWebページで要素が見つかりません

  5. 5

    Djangoでページが見つかりません

  6. 6

    APIでページが見つかりません

  7. 7

    Ajaxでページが見つかりません(404)

  8. 8

    パグ(翡翠)ベースHTMLページ:要素が見つかりません:#app

  9. 9

    Spring Bootプロジェクトでページが見つかりません

  10. 10

    codeigniterでエラー「404ページが見つかりません」

  11. 11

    WordPressでエラー404ページが見つかりません

  12. 12

    djangoでページが見つかりません(404)エラー

  13. 13

    ページ上のデータが見つかりません

  14. 14

    SpringFrameworkのエラーページが見つかりません

  15. 15

    Django 2.0.5404エラー-ページが見つかりません

  16. 16

    codeigniterでページ付けが機能せず、404ページが見つかりません

  17. 17

    Djangoサイトでページが見つかりません404?

  18. 18

    Microsoftサインインページで要素が見つかりません

  19. 19

    春のmvcの例で404ページが見つかりません

  20. 20

    Djangoサイトでページが見つかりません404

  21. 21

    Laravelプロダクションでページが見つかりません

  22. 22

    Micronaut 1.3.5:ページが見つかりません

  23. 23

    GAE Golang Gorillamux-404ページが見つかりません

  24. 24

    変数が見つかりません:PhantomJSのページ

  25. 25

    influxdb python:404ページが見つかりません

  26. 26

    Herokuアプリページが見つかりません

  27. 27

    GitHubページがGoogleに見つかりません

  28. 28

    TFS-APIページが見つかりません

  29. 29

    Django404ページが見つかりません

ホットタグ

アーカイブ