스프링 시큐리티 - Authorization.

하쮸·2025년 1월 10일
0
post-thumbnail

1. 권한.

  • 회원가입을 하고 DB에서 SQLrole값만 UPDATE해줌.
  • manager로 로그인할 시.

  • admin으로 로그인할 시.

SecurityConfig

public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.csrf().disable();
        httpSecurity.authorizeRequests()
                .antMatchers("/user/**").authenticated() 
                .antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")  
                .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                
                ....
                
  • /user는 인증만 되어 있다면, 즉 로그인만 되어 있다면 접근 가능.
  • /managerROLE_ADMIN 또는 ROLE_MANAGER권한이 있는 사람만 접근 가능.
  • /adminROLE_ADMIN권한이 있는 사람만 접근 가능.

1-1. @Secured, @PreAuthorize.

    @GetMapping("/info")
    @ResponseBody
    public String info() {
        return "개인 정보";
    }
  • Controller에 info()메서드 추가.

  • /info는 로그인한 사용자뿐만 아니라 로그아웃 상태에서도 접근 가능함.

SecurityConfig

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
				....
}
  • @EnableGlobalMethodSecurity(securedEnabled = true) 에노테이션 추가.
    • @Secured 에노테이션 활성화 시켜줌.
    @Secured("ROLE_ADMIN")
    @GetMapping("/info")
    @ResponseBody
    public String info() {
        return "개인 정보";
    }
  • 메서드에 @Secured("ROLE_ADMIN")을 추가.
    • 회원가입이 되어 있는 유저 중에서 ROLE_ADMIN권한이 있는 사용자만 접근 가능해짐.
    • manager로 접속 시 403에러.

SecurityConfig

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
				....
}
  • prePostEnabled = true도 추가.
    • securedEnabled = true
      • @Secured 에노테이션 활성화.
    • prePostEnabled = true
      • @PreAuthorize 에노테이션 활성화.
    @PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
    @GetMapping("/data")
    @ResponseBody
    public String data() {
        return "데이터 정보";
    }
  • @Secured는 권한을 1개만 설정, @PreAuthorize는 권한 여러 개 가능.
  • 그래서 admin뿐만 아니라 manager/data에 접근 가능.
profile
Every cloud has a silver lining.

0개의 댓글