개발/Java & Kotlin

[Spring] 스프링 시큐리티 (1)

devhooney 2022. 7. 4. 22:59
728x90

7.3 스프링 시큐리티

- 인증, 인가 기능의 공통 기반 제공

- 웹앱에서 인증, 인가를 구현하기 위한 각종 필터 클래스 제공

- Bean 정의 파일이나 프로퍼티 파일, 데이터베이스, LDAP 등, 여러 리소스로부터 인증, 인가 정보 취득 가능

- HTTP BASIC 인증이나 화면에서의 폼 인증 등, 웹앱에서 일반적으로 선택되는 인증 지원

- 메소드 호출에 대한 액세스 제어에 AOP 사용 가능

- 시큐리티 공격에 대한 방어 기능을 제공(CSRF 대책, Session Fixation 대책 등) 

 

7.3.1 스프링 시큐리티의 설정 파일

- Bean 정의 파일(XML)

- JavaConfig 파일

@EnableWebSecurity
protected class SecurityConfig extends WebSecurityConfigurerAdapter {
	
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    	http
           .authorizeRequests()
            .antMatchers("/top.jsp").permitAll()
            .antMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
            .anyRequest().authenticated()
            .and()
           .formLogin()
            .defaultSuccessUrl("/top.jsp")
            .and()
           .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/top.jsp")
            .and()
           .csrf()
            .disable();
    }
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    	auth.inMemoryAuthentication()
        	.withUser("user").password("userpassword").authorities("ROLE_USER").and()
            .withUser("admin").password("adminpassword").authoritires("ROLE_ADMIN");
    }
}

- /top.jsp는 로그인하지 않은 사용자도 액세스 가능

- /admin 이하는 ROLE_ADMIN에 설정된 사용자로 로그인한 경우만 액세스 가능

- 상기 이외의 경로는 인증된 사용자인 경우만 액세스 가능

- 인증 방식에는 폼 로그인 방식(화면상에 사용자명, 패스워드를 입력하는 방식) 

- 로그아웃 기능이 있으며 로그아웃 URL은 /logout이며, 로그아웃 후에는 /top.jsp로 이동

- CSRF 대책 기능은 사용하지 않음

- 다음 사용자를 만들어, 메모리 상에서 관리함

사용자명: user, 패스워드: userpassword, ROLE: ROLE_USER

사용자명: admin, 패스워드: adminpassword, ROLE: ROLE_ADMIN

 

7.3.2 웹 애플리케이션에 적용

- 스프링 시큐리티 적용 방법은 두가지

1. web.xml

2. SecurityWebApplicationInitializer 클래스로 설정

 

SecurityWebApplicationInitializer로 설정하는 방법

 

public class SecurityWebApplicationInitializer
	extends AbstractSecurityWebApplicationInitializer {
	
    public SecurityWebApplicationInitializer() {
    	super(SecurityConfig.class); // 여러 개의 클래스 올 수 있음
    }
}


// Bean 정의 파일 사용한 경우
public class SecurityWebApplicationInitializer
	extends AbstractSecurityWebApplicationInitializer {
	
    public SecurityWebApplicationInitializer() {
    	super(ImportResourceConfig.class); 
    }
    
    @Configuration
    @ImportResource("classpath:/META-INF/spring/beans-security.xml")
    public static class ImportResourceConfig {
    
    }
}

 

 

728x90

'개발 > Java & Kotlin' 카테고리의 다른 글

[Java] 기본 알고리즘  (0) 2022.07.07
[Spring] 스프링 시큐리티 (2)  (0) 2022.07.05
[Spring] 스프링 AOP (2)  (0) 2022.07.04
[Java] 람다와 스트림(5)  (0) 2022.07.04
[Spring] 스프링 AOP (1)  (0) 2022.07.01