반응형
권한 설정과 표현식
Spring Security 5에서는 **AuthenticationManagerBuilder**를 사용하여 메모리 인증을 설정할 수 있었지만, Spring Security 6에서는 몇 가지 변경이 있을 수 있습니다.
1. PassworEncoder 사용 필수
먼저, Spring Security 6에서는 비밀번호 암호화에 대한 설정이 강화되었으므로 **{noop}**을 사용하는 것이 더 이상 권장되지 않습니다. 대신에 비밀번호 인코더를 명시적으로 지정해야 합니다. 그래서 아래와 같이 PasswordEncoder를 빈으로 등록하는 소스코드를 먼저 작성합니다.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
2. inMemoryAuthentication 사용해서 메모리 인증 설정
아래는 Spring Security 6에 대한 예제입니다. 여기서는 **PasswordEncoder**를 사용하여 비밀번호를 인코딩하고 **inMemoryAuthentication**을 통해 사용자를 설정합니다.
@Primary
@Bean
public AuthenticationManagerBuilder configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user1").password(passwordEncoder().encode("1111")).roles("USER")
.and().withUser("sys").password(passwordEncoder().encode("1111")).roles("SYS", "USER")
.and().withUser("admin").password(passwordEncoder().encode("1111")).roles("ADMIN", "SYS", "USER");
return auth;
}
- AuthenticationManagerBuilder를 사용하여 세 가지 유형의 사용자 - 일반 사용자(USER), 시스템 관리자(SYS), 그리고 최고 관리자(ADMIN) - 를 설정합니다.
- 패스워드는 인코드 사용해야합니다. (시큐리티6 이상부터 필수)
- user에 roles를 통해 역할을 부여합니다.
3. url과 권한 Matcher
다음으로, HTTP 요청에 대한 보안을 설정합니다. HttpSecurity 객체를 사용하여 다양한 HTTP 경로에 대한 접근 제어를 설정할 수 있습니다.
스프링 시큐리티 5에서는 antMatchers를 사용해서 권한설정을 했다면, 6버전 이상부터는 requestMatchers 를 사용해서 url의 권한을 매칭할 수 있습니다.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(ar -> ar
.requestMatchers("/user").hasRole("USER")
.requestMatchers("/admin/pay").hasRole("ADMIN") // 더 구체적인 범위가 위에 나와야합니다.
.requestMatchers("/admin/**").hasAnyRole("ADMIN", "SYS") // 6.0 이하 버전에서는 antMatchers("/admin/**").access("hasRole('ADMIN') or hasRole('SYS')")
.anyRequest()
.authenticated()
)
.formLogin(withDefaults())
.build();
}
- 더 구체적인 범위가 위에 나와야지 세부 권한을 적용 할 수 있습니다.
- 이 설정에서는 /user 경로는 USER 역할을 가진 사용자만, **/admin/pay**는 ADMIN 역할을 가진 사용자만 접근할 수 있습니다. /admin/** 경로는 ADMIN 또는 SYS 역할을 가진 사용자가 접근할 수 있습니다. 그리고 모든 요청은 인증을 필요로 합니다.
Spring Security를 이용하면 몇 가지 간단한 설정만으로도 강력한 인증 및 권한 관리 시스템을 구현할 수 있습니다. 이 글이 Spring Security의 기본적인 사용 방법을 이해하는 데 도움이 되길 바랍니다.
반응형
'Back-end > Spring' 카테고리의 다른 글
[Spring] DTO 간 복사(BeanUtils, ModelMapper커스텀 하는방법 포함) (0) | 2024.02.09 |
---|---|
[Spring] 시큐리티 예외 처리와 사용자 인증 (시큐리티6 이상) (1) | 2024.01.30 |
[Swagger] Spring 3.0 이상 버전에서 스웨거 적용하는 방법 (0) | 2024.01.29 |
[Spring] Access-Control-Allow-Origin header is present 해결방법 (0) | 2024.01.27 |
[Spring] 시큐리티 Security Form Login 인증 기본 설정 (스프링 3.0 버전 이상, 시큐리티 6.0 버전 이상, WebSecurityConfigurerAdapter 대체) (0) | 2024.01.10 |