ํ๋ก์ ํธ ์งํ ์ค spring security๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ์ฌ DB์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์
spring security ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ build.gradle์ ์ฃผ์ ํด์ฃผ์๋ค.
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
spring security๋ฅผ ์ฃผ์ ํ๊ฒ ๋๋ฉด ์๋์ผ๋ก login ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋๊ณ ,
์ํ๋ url์ ์๋ฌด๋ฆฌ ์ ๋ ฅํด๋ ์ด๋ํ์ง ์๋๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ
๋จผ์ , application์์ ์คํ๋๋ Main.java ํด๋์ค ํ์ผ์
@SpringBootApplication ์ด๋ ธํ ์ด์ ์ (exclude = SecurityAutoConfiguration.class) ์ต์ ์ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ๋์ค์ง ์๊ฒ ํด์ค ์ ์๋ค๋ผ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
package com.project.board;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(BoardApplication.class, args);
}
@RequestMapping("/")
public String home() {
return "home";
}
}
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ์ง๋ง ๋๊ฐ์ด ๋ก๊ทธ์ธํ์ด์ง๊ฐ ์์ด์ง์ง ์์๋ค.
๋๋ฒ์งธ, ๋ ๋ค๋ฅธ ๊ตฌ๊ธ๋ง๋ค์ ํตํด springConfig class๋ฅผ ํตํด
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.anyRequest().permitAll();
return http.build();
http.authorizeRequests().antMatchers("/**").permitAll()
.anyRequest().authenticated();
return http.build();
}
}
์ด๋ ๊ฒ csrf๋ฅผ ๋ง๊ณ , ๊ถํ์ ํ์ด์ฃผ๋ ๊ฒฝ์ฐ๋ ๋ค์ํ๊ฒ ๊ฒ์ํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ ์ํ๋ฆฌํฐ 5๋ฒ์ ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ํ๋ ์ฝ๋์์ ์ ์ ์์๋ค.
์ฆ, ์ด๋ ๊ฒ ์์ฑํ๊ฒ ๋๋ฉด 6๋ฒ์ ์ด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ด์ ๊ฐ์ด ๋ฒ์ ๋ฌธ์ ๋ก ์ฌ์ฉํ ์ ์์์ ์ ์ ์๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์
spring security ๊ณต์๋ฌธ์์ ๋๋ถ์ด, ๋ค์ํ ๊ตฌ๊ธ๋ง์ ํตํด Lamda ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํจ์ ์๊ฒ ๋์๋ค.
์ฆ,
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth -> auth
.anyRequest().permitAll()
);
return http.build();
}
์ด๋ ๊ฒ ๋๋ค์์ ์ฌ์ฉํ์ฌ csrf๋ฅผ ๋ง๊ณ , ๋ก๊ทธ์ธ ํ์ด์ง๋ก์ redirect๋ฅผ ๋ง๋๋ก ์ค์ ํ๋ค.
์ต์ข ์ฝ๋
package com.project.board;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public static PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth -> auth
.anyRequest().permitAll()
);
return http.build();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth, PasswordEncoder passwordEncoder) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password(passwordEncoder.encode("password"))
.roles("USER");
}
}
์ด์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํจ์ ํตํด ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง๋ก์ ์ด๋์ ๋ง๊ณ ์ํ๋ URL๋ก ์ด๋ํ ์ ์๋๋ก ๊ตฌํํ ์ ์์๋ค.
'๐ฉ๐ปโ๐ป Developer > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[spring boot] @.์๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ ์ง์ (3) | 2024.09.06 |
---|---|
[Spring] ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์๋ ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ (0) | 2024.04.01 |
[Spring] ์คํ๋ง์ด ์ฃผ๊ธฐ์ ์ผ๋ก ์์กดํ๋ ๊ฒ์? (0) | 2024.03.23 |
[Spring] ์คํ๋ง ๋ถํธ์์ auto-configuration์ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ (0) | 2024.03.21 |
[Spring] traceld ์ spanld๋? (0) | 2024.03.20 |
๋๊ธ