Welcome to our Website
LAPOZ-AI
Start a conversation with AI with GPT!
今さらSpringBoot Securityの使い方を学んでみた
2022年06月23日
Spring SecurityはJavaによるエンタープライズ向けアプリケーションのためのセキュリティフレームワークで、認証と認可、CSRF保護、セッション管理など、アプリケーションのセキュリティを提供します。
依存関係の追加
まずはSpring Securityをプロジェクトに追加する必要があります。Gradleを使用している場合、build.gradleに以下の行を追加します
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
Mavenを使用している場合は、pom.xmlに以下の依存関係を追加します
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
Security Configurationクラスの作成
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
ユーザーの詳細を提供
上記の設定では全てのリクエストは認証が必要になりますが、まだユーザー詳細を提供していません。以下のコードはInMemoryUserDetailsManagerを使用し、メモリ内でユーザーを管理する例です
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();
userDetailsService.createUser(User.withUsername("user").password(passwordEncoder().encode("password")).roles("USER").build());
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}