Spring Security 권한처리

바그다드·2023년 4월 3일
0

Spring Security

목록 보기
5/17
  • 이제 각 페이지별로 권한을 설정해보자!

계정 생성

  • manager와 admin권한을 가진 계정을 생성하기 위해 일단 두 개의 계정을 생성하자

각 계정 권한 수정

update user set role = 'ROLE_MANAGER' where id = 5;
update user set role = 'ROLE_ADMIN' where id = 6;
commit;

  • 각 계정의 권한을 쿼리문을 이용하여 수정해줬다.
    이제 manager계정을 가지고 각 페이지에 접근해보자



  • manager권한을 가진 계정으로 로그인을 했더니 user / manager페이지에는 접근을 할 수 있지만 admin페이지에는 접근할 수 없다.
  • admin으로 로그인을 하고 다시 admin페이지로 접근해보자
  • admin계정으로는 admin페이지에도 접근이 가능하다!

메소드별 권한 설정

@Secured

  • 앞서 SecurityConfig를 이용하여 url단위로 권한을 설정하였다, 그런데 url의 읽기, 쓰기, 수정 기능에 따라 필요한 권한이 달라진다면?

SecurityConfig 수정

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true) // 이 부분 수정
public class SecurityConfig {

IndexController 메소드 추가

	@Secured("ROLE_ADMIN") // 특정 권한이 있는 사용자만 접근 가능!
    @GetMapping("/info")
    @ResponseBody
    public String info() {
        return "개인정보";
    }
  • 이렇게 하고 user계정이나 manager계정으로 접속해보자
  • @Secured를 이용해 권한을 설정해두었기 때문에 admin권한을 가진 사용자만이 접근이 가능해진다!!!
  • config에서 설정해준 것과 달리 메소드별로 권한 설정을 해줄 수 있다.
  • 다른 방법을 하나 더 알아보자

@PreAuthorize

SecurityConfig 수정

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) // 이부분 수정
public class SecurityConfig {

IndexController 메소드 추가

	@PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')") // data 메서드가 실행되기 직전에 실행
    @GetMapping("/info")
    @ResponseBody
    public String data() {
        return "데이터정보";
    }
  • 이런 방식으로 메서드에 접근할 수 있는 권한을 설정해줄 수 있다!
  • 이렇게 하면 manager / admin 계정만 위의 메서드에 접근할 수 있게 된다.
  • @PostAuthorize라는 것도 있는데 이건 메서드가 끝난 직후에 사용되지만 정작 잘 쓰이지 않는다.
profile
꾸준히 하자!

0개의 댓글