web-dev-qa-db-ja.com

Springセキュリティでは、CSSまたはJSリソースをロードできません

リソースはsrc/main/resources/static/cssまたはsrc/main/resources/static/jsの下にあり、スプリングブートを使用しています。セキュリティのクラスは次のとおりです。

@Configuration
@EnableWebMvcSecurity
@EnableGlobalAuthentication
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
//      http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
//              .permitAll().anyRequest().authenticated();
//      http.formLogin().loginPage("/login").permitAll().and().logout()
//              .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("test").password("test")
                .roles("USER");
    }
}

ブラウザから「/ index」にアクセスするとうまく機能します(リソースをロードできます)が、クラスの4行のコメントを外すと、リソースをロードできません。4行の意味は次のとおりです。

    http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
            .permitAll().anyRequest().authenticated();
    http.formLogin().loginPage("/login").permitAll().and().logout()
            .permitAll();

誰もこれを助けることができますか?前もって感謝します。

29
Junjie

おそらく、permitAllとして設定されたこれらの項目を含むディレクトリを用意する必要があります。

これが私の春のセキュリティコンテキストファイルからの抜粋です。リソースディレクトリの下に、js、css、およびimagesフォルダーがあり、これらのフォルダーにはこの行からアクセス許可が与えられています。

<security:intercept-url pattern="/resources/**" access="permitAll" />

何らかの理由で、これは私にはうまくいきませんでした:

http.authorizeRequests().antMatchers("/resources/**").permitAll();

これを追加する必要がありました。

http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();

また、この行は、restricsアクセスするコードの後でなければなりません。

18
Sande

次を追加

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**").anyRequest();
    }
7
Yogesh Bombe

特定のファイルには「/*.js」、ディレクトリには「/ resources/**」のように直接使用することもできます

 http.authorizeRequests()
                .antMatchers("/", "/login", "/logout", "/error").permitAll()
                .antMatchers("/resources/**").permitAll()
                .antMatchers("/*.js").permitAll()
                .antMatchers("/api/**").authenticated()
4
Om Sharma

同じ問題があり、「permitAll」へのアクセスを変更しても解決しませんでした。セキュリティを「なし」に設定した新しいhttpパターンを作成し、認証なしでcssファイルとjsファイルをダウンロードできました。

<http pattern="/resources/**" security="none" />
0
JohnP

これは最終的に私のために働いた。/home(ログインページが表示されます)およびエラーメッセージは認証を必要としません。すべてのリソースはpermitAllであり、/ main URLが認証されます。その他のURL(/ users/customersなど)は、isAuthenticated()として追加する必要があります。

  <security:intercept-url pattern="/home" access="isAnonymous()"/>
  <security:intercept-url pattern="/error*" access="isAnonymous()"/>      
  <security:intercept-url pattern="/main" access="isAuthenticated()"/>
  <security:intercept-url pattern="/css/**" access="permitAll" />     
  <security:intercept-url pattern="/js/**" access="permitAll" />
  <security:intercept-url pattern="/fonts/**" access="permitAll" />
  <security:intercept-url pattern="/images/**" access="permitAll" />
0
Shahriar