읽은 책 정리/코드로 배우는 스프링 웹 프로젝트

[Spring] 36 어노테이션을 이용하는 스프링 시큐리티 설정

포포015 2021. 3. 1. 23:31

스프링 시큐리티 역시 다른기능들처럼 어노테이션을 이용해서 필요한 설정을 추가할수 있다.

 

사용되는 어노테이션은 주로 

@Secured - 스프링 시큐리티 초기부터 사용되었고, () 안에 'ROLE_ADMIN'과 같은 문자열 혹은 문자배열을 이용한다

 

@PreAuthorize,@PostAuthorize - 3버전부터 지원되며, () 안에 표현식을 사용할수 있으므로 최근에 많이사용

 

예제를 위해 컨트롤러에 추가해본다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MEMBER')")
    @GetMapping("/annoMember")
    public void domember2() {
        
        log.info("로그인 어노테이션 멤버");
    }
    
    @Secured({"ROLE_ADMIN"})
    @GetMapping("/annoAdmin")
    public void doAdmin2() {
        
        log.info("어드민 어노테이션 ");
        
    }
    
cs

doMember2는 @PreAuthorzie를 이용해 표현식으로 체크하고

doAdmin2는 @Secured를 이용해 처리함( 단순히 값만 추가할수 있으므로 여러개 사용할떄는 배열로 표현한다)

 

주의할 사항은 컨트롤러에서 사용하는 시큐리티의 어노테이션을 활성하 하기위해서는,

security-context.xml이 아닌, 스프링 MVC의 설정을 담당하는 servlet-context.xml에 관련설정을 추가해야한다.

 

servlet-context.xml에 security 네임스페이스를 추가한다. ( 5.0 버전 지워주기)

추가된 security 네임스페이스를 이용해서 global-method-security를 지정한다.

기본으로 'disable'되어 있으므로 변경해준다

1
2
3
 
    <security:global-method-security pre-post-annotations="enabled" secured-annotations="enabled"/>
    
cs

 

 

 

????근데 이건 부트에서 쓸떄 쓰는건가..?? 이게 책의내용의 끝인데 괜히 더 헷갈린다...