Spring legacy

스프링 시큐리티 어노테이션

voider 2020. 9. 13. 19:37

스프링 시큐리티 어노테이션

주로 사용하는 세 가지 어노테이션

  • @Secured

    • 스프링 시큐리티 초기부터 사용했다. ()안에 'ROLE_ADMIN' 같은 문자열 또는 문자열 배열을 이용한다.
  • @PreAuthorize, @PostAuthorize

    • 스프링3버전부터 지원한다. ()안에 표현식을 사용할 수 있어서 최근에는 더 많이 사용한다.
http.authorizeRequests()
.antMatchers("/sample/all").permitAll()
.antMatchers("/sample/member").access("hasRole('ROLE_MANAGER')")
.antMatchers("/sample/admin").access("hasRole('ROLE_ADMIN')");

또는

<security:intercept-url pattern="/sample/all" access="permitAll"/>
<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MANAGER')"/>
<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>

이런 식으로 설정하는 게 아니라 어노테이션만으로 간단히 아래와 같이 설정할 수 있다.

@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_MEMBER')")
@GetMapping("/member")
public void doMember() {
    log.info("회원만 접근 가능");
}

@PreAuthorize("hasRole('ROLE_ADMIN')")
@GetMapping("/admin")
public void doAdmin() {
    log.info("관리자만 접근 가능");
}

xml설정을 이용하는 경우
servlet-context.xml (시큐리티.xml아님!!)에 security네임 스페이스를 추가한 다음,

<security:global-method-security
    pre-post-annotation="enabled" secured-anotations="enabled" />

설정을 해주면 된다.

자바 설정을 이용하는 경우,
ServletConfig.java 선언부에

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)

추가해주면 된다.