Spring Security
Spring에서는 Web 기반의 Security, Method 기반의 Security 기능을 제공
Method 기반은 Method 별로 권한을 체크하며 Filter 단이 아닌 Controller 단에서 권한을 처리
Web 기반은 Filter 단에서 권한을 처리
두 개의 Security 적용 방식은 하나만 선택하는게 아니라 동시에 섞어서 사용 가능
예를 들어 Web에서 URL과 Token 인증을 하고 Method에서 권한에 따라 인가를 하는 방법이 있다.
왜쓰는가?
-> 웹에서 서비스를 하기 위해 리소스와 유저 정보를 가지고 있는데 이를 보호하기 위해 보안 정책을 설정을 서포트하는 라이브러리인 Spring Security 사용
Config 에서 WebSecuerityConfigurerAdaper는 deprecated 됨(스프링 부트 3.0부터는 스프링 시큐리티 6.0 이상 사용시 )
FilterChain 하는 역할을 하는 메소드를 직접 구현 하여 @Bean으로 등록해주어야함.
@EnableGlobalMethodSecurity 어노테이션
: Spring AOP proxy를 사용해 구현된 방법으로 3가지의 사용 방법이 있으며 한번에 사용도 가능하다
securedEnabled, prePostEnabled, jsr250Enabled
사용 예 ) @EnableGlobalMethodSecurity(prePostEnabled = true)
EnableGlobalMethodSecurity 인터페이스
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({ GlobalMethodSecuritySelector.class })
@EnableGlobalAuthentication
@Configuration
public @interface EnableGlobalMethodSecurity {
/**
* Determines if Spring Security's pre post annotations should be enabled. Default is
* false.
* @return true if pre post annotations should be enabled false otherwise.
*/
boolean prePostEnabled() default false;
/**
* Determines if Spring Security's {@link Secured} annotations should be enabled.
* @return true if {@link Secured} annotations should be enabled false otherwise.
* Default is false.
*/
boolean securedEnabled() default false;
/**
* Determines if JSR-250 annotations should be enabled. Default is false.
* @return true if JSR-250 should be enabled false otherwise.
*/
boolean jsr250Enabled() default false;
…(생략)
}
1.securedEnabled - @Secured
true 값을 설정하여 인가를 처리
SpEL(Spring Expression Languge)를 지원하지 않음
한번에 여러가지 Role으로 인가처리 가능(두 개의 롤을 가지 유저)
legacy 어노테이션
2.prePostEnabled - @PreAuthorize
true 값을 설정하여 인가 처리
SpEL을 사용해서 인가처리
Spring Security Framework의 일부
ex) @PreAuthorize(“hasRole(‘ADMIN’) or #user.id == authentication.name”)
3.jsr250Enabled - @RolesAllowed
true 설정과 별도의 라이브러리 필요
JSR-250 Java Security Standard에 기초하고 있고 role-based 인가 기능만 있음
참고
'Spring > 1-5. Spring Security' 카테고리의 다른 글
OncePerRequestFilter란? (0) | 2023.11.24 |
---|---|
6) DaoAuthenticationManager와 UserDetailsService 사 (0) | 2023.06.11 |
5) BasicAuthenticationFilter를 사용하여 토큰 인증 (0) | 2023.06.08 |
4) Form Login과 Logout Filter (0) | 2023.06.04 |
3. Spring Security Authentication 구조와 매커니즘 (0) | 2023.06.04 |