私は、Spring SecurityおよびBootstrap HTMLファイル(thymeleafテンプレート)でSpring MVCアプリケーションを構築しています。SpringSecurityの部分は、Spring Guideに基づいています Spring Security =そして、Spring Bootアプリケーションサーバーと組み合わされます。
Spring Securityを有効にすると、bootstrap cssファイルが読み込まれず、エラーメッセージが表示されます。
Refused to execute script from 'http://localhost:8080/js/bootstrap.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
上記のエラーメッセージは、chrome開発者コンソールからのものです。
私が試したこと:
permit
呼び出しへのリソースパスの追加私のディレクトリ構造:
/main
|-> /Java
| BootStart.Java
|-> /security
|SecurityConfiguration.Java
|-> /resources
|-> /static
|-> /css /** bootstrap location */
|-> /js
|-> /fonts
|-> /templates
| /user
| sample.html
BootStart.Javaは、Spring Bootによって取得されるJavaファイルです。
BootStart.Java:
@EnableAutoConfiguration
@ComponentScan
public class BootStart {
public static void main(String[] args) {
SpringApplication.run(BootStart.class, args);
}
}
SecurityConfiguration.Java:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
http
.authorizeRequests()
.antMatchers("/", "/resources/static/**").permitAll()
.anyRequest().authenticated();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
Sample.html:
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" th:href="@{/css/bootstrap.css}" href="../../css/bootstrap.min.css"/>
<link rel="stylesheet" th:href="@{/css/bootstrap-theme.css}" href="../../css/bootstrap-theme.min.css"/>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div class="alert alert-danger" role="alert">!Basic template!</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
現在、私のpomで次の依存関係を使用しています。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
/ static resourcesディレクトリからcss/jsファイルをロードできるようにSpring Securityを構成するにはどうすればよいですか?
answer 他の同様の質問を確認してください。
Jsファイルを/js/
dir、そのようなMIMEエラーはありません。
また、JavaScriptファイルの場合は、セキュリティを無効にすることをお勧めします。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/the_js_path/**");
}
同じフォルダ構造で同じエラーが発生しました。CSSファイルにありました。
私がしたすべてが追加されます/css/**
以下のantMatcher()で:
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.antMatchers("/css/**").permitAll() //Adding this line solved it
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.loginProcessingUrl("/sign-in")
.defaultSuccessUrl("/home")
.failureUrl("/error")
.and()
.logout()
.logoutSuccessUrl("/logout")
.permitAll()
.and()
.csrf().disable();
}
あなたの場合は単に/js/**
をantMatcher()で実行してから、permitAll()を使用します。
私にはこの問題があり、しばらくの間苦労しました。すべての「一致しない」ルートに一致するルートを作成し、index.html
を送信しました。
@Controller
public class DefaultPageController {
@Autowired
private LogService logService;
@GetMapping("/*")
public String defaultPage(Model model){
logService.saveLog(Log.LogType.INFO, null, "Default route");
return "index";
}
}
問題は、ルート/file.js
を上書きし、静的ファイルを送信せず、常にindex.html
を送信することでした。
したがって、解決策はルートをカスタマイズすることだけでした。
私はこれを使って私の問題を解決しました、あなたはこれを試すことができます
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
お役に立てば幸いです。
私たちが使用するときpermitall()"または anyrequest() 次に、MIMEチェックを有効にするため、アクセスに使用するすべてのURLリストを指定します。
コントローラに新しいメソッドを追加した後も同じエラーが発生しました。
_@GetMapping
_アノテーションの値を指定するのを忘れており、_@Controller
_自体がどのURLにもバインドされていませんでした。私のメソッドに@GetMapping("/foo")
を追加すると問題が解決しました。それがなぜ起こったのかはまだわかりませんが、調べるつもりです。
私はcssファイルの最初からコメントを削除し、それは動作します。