π‘ μ€νλ§ μν리ν°(Spring Security)λ?
μ€νλ§ μν리ν°λ μ€νλ§ κΈ°λ°μ μ ν리μΌμ΄μ μ 보μ(μΈμ¦κ³Ό κΆν, μΈκ° λ±)μ λ΄λΉνλ μ€νλ§ νμ νλ μμν¬ μ¦ μΈμ¦(Authenticate, λꡬμΈμ§?) κ³Ό μΈκ°(Authorize, μ΄λ€κ²μ ν μ μλμ§?)λ₯Ό λ΄λΉνλ νλ μμν¬λ₯Ό λ§νλ€.
μ€νλ§ μν리ν°λ μ£Όλ‘ μλΈλ¦Ώ νν°μ μ΄λ€λ‘ ꡬμ±λ νν°μ²΄μΈμ ν΅ν΄ μΉ μμ²μ λν 보μ κ΄λ ¨ μ²λ¦¬λ₯Ό μννλ€. μλΈλ¦Ώ νν°λ HTTP μμ²μ κ°λ‘μ± μ μ²λ¦¬ λ° νμ²λ¦¬λ₯Ό μνν μ μλλ‘ λ§λ€μ΄μ§ μλ° νμ€ κΈ°μ μ΄λ€.
νν°λ 체μΈμΌλ‘ ꡬμ±λ μ μμΌλ©°, νλμ νν°κ° μμ μ μν μ ν ν μμ²κ³Ό μλ΅ κ°μ²΄λ₯Ό λ€μ νν°λ‘ λκΈΈ μ μλ€.
κ·Έλ¦¬κ³ λ³΄μκ³Ό κ΄λ ¨ν΄μ 체κ³μ μΌλ‘ λ§μ μ΅μ μ μ 곡ν΄μ£ΌκΈ° λλ¬Έμ κ°λ°μ μ μ₯μμλ μΌμΌμ΄ 보μκ΄λ ¨ λ‘μ§μ μμ±νμ§ μμλ λλ€λ μ₯μ μ΄ μλ€. μ€μ λ‘ μ€νλ§ μν리ν°λ₯Ό μ¬μ©νκΈ° μ΄μ κΈ°μ‘΄ λ Έλμ 리μ‘νΈλ‘ νΌμ νλ‘μ νΈλ₯Ό μ§ννμ κ²½μ° λ‘κ·ΈμΈμ κ²½μ° μΌμΌν κ° κ³μ λ§λ€ μ κ·Ό 쑰건μ λΆμ¬νκ±°λ μΌμ urlμ μ κ·Όμ μ μ΄νλ λ± μμ μ΄ λ§μμ§λ§ μ€νλ§ μν리ν°λ₯Ό κ°λ¨νκ² νμ©ν΄λ³΄λ©΄μ μ¬λ¬λͺ¨λ‘ νΈλ¦¬ν¨μ λκΌλ€.
μ κ·Ό 주체(Principal) : 보νΈλ 리μμ€μ μ κ·Όνλ λμ
μΈμ¦(Authentication) : 보νΈλ 리μμ€μ μ κ·Όν λμμ λν΄ λꡬμΈμ§, μ ν리μΌμ΄μ
μ μμ
μ μνν΄λ λλ 주체μΈμ§ νμΈνλ κ³Όμ (ex. Form κΈ°λ° λ‘κ·ΈμΈ) => μ¦, λꡬμΈμ§?
μΈκ°(Authorize) : ν΄λΉ 리μμ€μ λν΄ μ κ·Ό κ°λ₯ν κΆνμ κ°μ§κ³ μλμ§ νμΈνλ κ³Όμ (After Authentication, μΈμ¦ μ΄ν) => μ¦, μ΄λ€ κ²μ ν μ μλμ§?
κΆν : μ΄λ ν 리μμ€μ λν μ κ·Ό μ ν, λͺ¨λ 리μμ€λ μ κ·Ό μ μ΄ κΆνμ΄ κ±Έλ €μμ. μΈκ° κ³Όμ μμ ν΄λΉ 리μμ€μ λν μ νλ μ΅μνμ κΆνμ κ°μ‘λμ§ νμΈ
μ¦ μ€νλ§ μν리ν°κ° νλ μΌμ μμ£Ό κ°λ¨νκ² λ§νμλ©΄ ν΄λΌμ΄μΈνΈμ μμ²μ΄ μλΈλ¦Ώμ λμ°©νκΈ° μ μ μ¬λ¬ νν°λ₯Ό κ±°μΉκ²ν΄μ μΈμ¦, μΈκ° λ° μ¬λ¬ 보μμ²λ¦¬λ₯Ό νλ κ²μ΄λ€.
π‘ μ€νλ§ μνλ¦¬ν° νΉμ§κ³Ό ꡬ쑰
- 보μκ³Ό κ΄λ ¨νμ¬ μ²΄κ³μ μΌλ‘ λ§μ μ΅μ μ μ 곡νμ¬ νΈλ¦¬νκ² μ¬μ©ν μ μμ
- Filter κΈ°λ°μΌλ‘ λμνμ¬ MVCμ λΆλ¦¬νμ¬ κ΄λ¦¬ λ° λμ
- μ΄λ Έν μ΄μ μ ν΅ν κ°λ¨ν μ€μ
- Spring Securityλ κΈ°λ³Έμ μΌλ‘ μΈμ & μΏ ν€λ°©μμΌλ‘ μΈμ¦
λμκ³Ό ꡬ쑰 νμ΅ μ°Έκ³
Kimchanjungλ λΈλ‘κ·Έ
https://kimchanjung.github.io/programming/2020/07/01/spring-security-01/
1. pox.xmlμ μΆκ°
2. webSecurityConfig Classμμ±
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/", "/css/**", "/account/**","/images/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/account/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery("select username,password,enabled "
+ "from user "
+ "where username = ?")
.authoritiesByUsernameQuery("select u.username,r.name "
+ "from user_role ur inner join user u on ur.user_id=u.id "
+ "inner join role r on ur.role_id = r.id "
+ "where u.username = ?");
}
// // Authentication λ‘κ·ΈμΈ
//// Authorization κΆν
@Bean
public static PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
μ€μ΅ κ°μ μ°Έκ³
https://www.youtube.com/watch?v=0JHIME7uGOk&list=PLPtc9qD1979DG675XufGs0-gBeb2mrona&index=9
'IT' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ€νλ§ μμ‘΄ κ΄κ³ μ£Όμ (DI) (0) | 2022.08.09 |
---|---|
μ€νλ§ μ΄λ Έν μ΄μ μ 리 (1) | 2022.08.09 |
μΈν°νμ΄μ€μ μΆμν΄λμ€ (0) | 2022.08.09 |
GC(Garbage Collection) (0) | 2022.08.09 |
μ μμΌ λ°©λ²λ‘ (0) | 2022.08.09 |