λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

IT

Spring Security

728x90

πŸ’‘ μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°(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/

 

[Spring Security] μŠ€ν”„λ§μ‹œνλ¦¬ν‹° κΈ°λ³Έκ°œλ…κ³Ό λ™μž‘κ΅¬μ‘°μ˜ 이해(1)

μŠ€ν”„λ§μ‹œνλ¦¬ν‹°μ˜ κΈ°λ³Έκ°œλ…κ³Ό λ™μž‘κ΅¬μ‘° 및 λ³„λ„μ˜ 인증을 λ„μž…ν•  λ•Œ ν•„μš”ν•œ μ»€μŠ€ν…€ ν•„ν„°λ₯Ό μž‘μ„±ν•˜κ³  μ μš©ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€” Spring Security μ»€μŠ€ν…€ ν•„ν„°λ₯Ό μ΄μš©ν•œ 인증 κ΅¬ν˜„ - μŠ€ν”„λ§μ‹œν

kimchanjung.github.io

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://wikidocs.net/161165

https://www.youtube.com/watch?v=0JHIME7uGOk&list=PLPtc9qD1979DG675XufGs0-gBeb2mrona&index=9