404 Error! Motivation Not Foun!!
昨年は9月ぐらいからなんやかんやありまして、盛大に更新をサボってたえ~すけさんですよ。
今年はスカウトを来ることを期待して、そこそこに更新していければと考えてますよ。
※フルテレが出来てひたすら実装するだけの仕事をしたい。。。
SpringSecurityを使った際のリソースファイルの制限メモ
SpringBootでSpringSecurityを使う際に、認証関係にて以下のような設定ファイルを定義するかと思います。
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 省略
http.authorizeHttpRequests(authz -> authz
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
// 省略
);
}
}
このPathRequest.toStaticResources().atCommonLocations()
って、
具体的にどこのフォルダに当たるんじゃい?ってあまり理解しないまま適当な名前でフォルダ切って作ってる方もいるかと思うので、上記の定義でどのフォルダが認証対象外(permitAll()
)になるのかを備忘録として残す。
で、どこで定義してあるん?
org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest.class
のatCommonLocations
ではこんな実装がされてる。
public final class StaticResourceRequest {
public StaticResourceRequestMatcher atCommonLocations() {
return at(EnumSet.allOf(StaticResourceLocation.class));
}
}
なるほどStaticResourceLocation.class
というEnumで定義されてるPathが対象なんだね。
ということで、StaticResourceLocationを見てみる
public enum StaticResourceLocation {
/**
* Resources under {@code "/css"}.
*/
CSS("/css/**"),
/**
* Resources under {@code "/js"}.
*/
JAVA_SCRIPT("/js/**"),
/**
* Resources under {@code "/images"}.
*/
IMAGES("/images/**"),
/**
* Resources under {@code "/webjars"}.
*/
WEB_JARS("/webjars/**"),
/**
* The {@code "favicon.ico"} resource.
*/
FAVICON("/favicon.*", "/*/icon-*");
private final String[] patterns;
StaticResourceLocation(String... patterns) {
this.patterns = patterns;
}
public Stream<String> getPatterns() {
return Arrays.stream(this.patterns);
}
}
要はこんな感じでresources/staticフォルダ内を作っていくよ
/プロジェクト名/src/main/resources/static/
├css/
│ ├CSSファイルを置くよ
├js/
│ ├JavaScriptを置くよ
├images/
│ ├画像を置くよ
├webjars
│ ├webjarを置くよ
├favicon.*(favicon.icoやfavicon.pngとかのファビコンを置くよ)
ファビコンに関しては、staticフォルダ内ならicon-*
って名前で定義したファイルが有れば認識してくれるっぽいです。
例:/images/icon-fav.ico とかでもイケるのではないかなと
やべぇ、今更フォルダ名とか返らんねぇよ。。。というプロジェクトの方へ
単純にrequestMatchers
を追加するだけで大丈夫だよ(知らんけど
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 省略
http.authorizeHttpRequests(authz -> authz
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
// 画像フォルダをimagesじゃなくて、imgで作っちゃったよって場合
.requestMatchers("/img/**").permitAll()
// 省略
);
}
}