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 {
}
}
'개발 > 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 |