TIL(23-01-05)

allnight5·2023년 1월 8일
0

TIL

목록 보기
32/55

3일전꺼.. 기억해서 다시 써보기

스프링 시큐리티 (3/6)에서 이어지는내용
상세 @EnableWebSecurity

@EnableWebSecurity

URL이 스프링 시큐리티의 제어를 받도록 만드는 어노테이션이다.
@EnableWebSecurity 어노테이션을 사용하면 내부적으로 SpringSecurityFilterChain이 동작하여 URL 필터가 적용된다. 스프링 시큐리티의 세부 설정은 SecurityFilterChain 빈을 생성하여 설정할 수 있다.

상세 @EnableGlobalMethodSecurity
별로 다를바없다..

@EnableGlobalMethodSecurity

@EnableGlobalMethodSecurity(securedEnabled = true, order = 2)
//securedEnabled = true @Secured 어노테이션 활성화를 하는데
order =2 만약 @EnableGlobalMethodSecurity어노테이션이 여러개 있을때 우선순위는 2번으로 하겠다.

시큐리티에서 Authentication에 정보를 저장하고 불러오는 원리? 순서?

시큐리티를 적용해주기위해서 WebSecurityConfig클래스를 만들어서 Jwt필터로 Jwt토큰과, UsernamePasswordAuthenticationToken를 실행시켜서 회원가입자가 있을때 Authentication에 유저정보를 저장하면서 권한도 저장해두는데 이것을 파라미터에서 @AuthenticationPrincipal라는 어노테이션을 이용한다면 실행되면서 AuthenticationPrincipalArgumentResolver가 @AuthenticationPrincipal어노테이션이 붙은 파라미터를 찾아서 Atuhentication내에서 알아낸 클래스이름과 컨테이너에서 설정한 값을 가지고 인증시 사용했던 인스턴스를 만들어내고 해당 Principal(jwt토큰이나 UsernamePasswordAuthenticationToken를 실행해서 Atuhentication에 저장해둔 값)을 돌려준다.

시큐리티 설정에 페이지마다 권한으로 접속혀용하기

UserDetails 구현체 메소드

Collection<? extends GrantedAuthority> getAuthorities()

에서 권한 부여하고

설정에서 이 페이지는 이정도의 권한을 가진자만 가능하다.
설정시 포함하는 곳은 다써줘야한다.. 너무 많으면 그만큼 오래걸릴수도있다.
//.antMatchers("/user/VVIP").hasRole("ROLE_VVIP","ROLE_ADMIN")
//.antMatchers("/user/VIP").access("hasRole('ROLE_VIP', 'ROLE_VVIP','ROLE_ADMIN')")
.antMatchers("/admin/**").hasAnyAuthority("ROLE_ADMIN")

상세내용 Meta-Annotaiton(@Target, @Retention,@Component)

meta-annotaiton이란 무엇인가

meta-annotation 은 다른 annation 에서도 사용되는 annotation 의 경우를 말하며 custom-annotation 을 생성할 때 주로 사용됩니다.
다른 설명으로는 애노테이션의 정의에 부여된 애노테이션이라는 의미이다.

Meta-Annotaiton(@Target, @Retention,@Component)

@Retention이란?(유지 범위지정하기)

@Retetion 은 Annotation 이 실제로 적용되고 유지되는 범위를 의미합니다. 유지되는 범위를 의미하는데 자기자신에게도 쓰인다, @Target도 마찬가지입니다.

@Retention(RetentionPolicy.RUNTIME)

SOURCE : 어노테이션을 사실상 주석처럼 사용하는 것. 컴파일러가 컴파일할때 해당 어노테이션의 메모리를 버립니다.
CLASS : 컴파일러가 컴파일에서는 어노테이션의 메모리를 가져가지만 실질적으로 런타임시에는 사라지게 됩니다. 런타임시에 사라진다는 것은 리플렉션으로 선언된 어노테이션 데이터를 가져올 수 없게 됩니다. 디폴트값입니다.
RUNTIME : 어노테이션을 런타임시에까지 사용할 수 있습니다. JVM이 자바 바이트코드가 담긴 class 파일에서 런타임환경을 구성하고 런타임을 종료할 때까지 메모리는 살아있습니다.

@Target이란?

@Target(ElementType.TYPE)
예를 들어 위에서 사용한 ElementType.TYPE 은 해당 Annotation 은 타입 선언 시 사용한다는 의미입니다.

@Component란?

@Component 란
개발자가 직접 작성한 Class 를 Bean 으로 만드는 것이다.

상세 @Configuration, @import

@Configuration

한 개 이상의 @Bean을 제공하는 클래스에 명시하는 어노테이션으로, IOC Container에게 해당 클래스가 Bean으로 구성된 클래스라는 것을 알려줍니다.

  • Bean을 등록할때 싱글톤(singleton)이 되도록 보장해준다.
  • 스프링컨테이너에서 Bean을 관리할수있게 됨.

@Import

@Import를 사용하면 설정 파일간의 계층을 만들 수 있습니다.

@Import( {AppConf1.class, AppConf2.class} ) // AppConf1, AppConf2 두 가지 설정 클래스를 포함시킨다. 
public class AppConfImport { 

위에 만든 2개의 클래스를 상속계층처럼 두 개 이상의 설정 파일을 서로 연결시키는 방법은 @Import 애노테이션을 사용하는 것입니다.

Non-@Configuration 클래스를 사용하는 경우 @ImportResource 를 사용하자.

profile
공부기록하기

0개의 댓글