リソースは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();
誰もこれを助けることができますか?前もって感謝します。
おそらく、permitAllとして設定されたこれらの項目を含むディレクトリを用意する必要があります。
これが私の春のセキュリティコンテキストファイルからの抜粋です。リソースディレクトリの下に、js、css、およびimagesフォルダーがあり、これらのフォルダーにはこの行からアクセス許可が与えられています。
<security:intercept-url pattern="/resources/**" access="permitAll" />
何らかの理由で、これは私にはうまくいきませんでした:
http.authorizeRequests().antMatchers("/resources/**").permitAll();
これを追加する必要がありました。
http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();
また、この行は、restricsアクセスするコードの後でなければなりません。
次を追加
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**").anyRequest();
}
特定のファイルには「/*.js」、ディレクトリには「/ resources/**」のように直接使用することもできます
http.authorizeRequests()
.antMatchers("/", "/login", "/logout", "/error").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/*.js").permitAll()
.antMatchers("/api/**").authenticated()
同じ問題があり、「permitAll」へのアクセスを変更しても解決しませんでした。セキュリティを「なし」に設定した新しいhttpパターンを作成し、認証なしでcssファイルとjsファイルをダウンロードできました。
<http pattern="/resources/**" security="none" />
これは最終的に私のために働いた。/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" />