[Spring]Spring Security_5

김피자·2023년 3월 10일
0

Spring

목록 보기
20/28
post-thumbnail

이번 글에서는 user에 이어 admin과 manager도 권한처리를 해보자.

회원가입

manager라는 이름과 admin이라는 이름으로 일단 회원가입을 진행한다.
User role을 디폴트 값으로 user로 등록했기 때문에 이를 일단 수정해준다.


컬럼 수정

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

이렇게하고 다시 로그인 페이지로 가서 매니저로 로그인을 하면

먼저 인덱스 페이지가 나오고


매니저에게 접근 권한이 있는 user페이지 manager페이지는 정상적으로 호출되지만, admin페이지에는 접근할 수 없는 것을 확인할 수 있다!

admin으로 로그인하면 모든 페이지에 접근할 수 있다.


SecurityConfig 수정


@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig {

상단에 EnableGlobalMethodSecurity 어노테이션 추가

IndexController 수정

@GetMapping("/info")
    public @ResponseBody String info(){
        return "개인정보";
    }

맨 아래 info() 메소드를 추가했다.

이렇게하면 로그인이 되어있던 안되어있던 info페이지로의 이동이 가능하다.

아까 적어준
@EnableGlobalMethodSecurity(securedEnabled = true)는
secured 어노테이션을 활성화하는 것인데 이렇게하고

IndexController 수정

@Secured("ROLE_ADMIN")
    @GetMapping("/info")
    public @ResponseBody String info(){
        return "개인정보";
    }

아까 작성한 info()메소드 위에 Secured 어노테이션을 다음과 같이 추가하면

info페이지로의 이동이 불가능하게 된다.

매니저로 로그인하여 info페이지에 접근하려는 경우

ROLE_ADMIN만 접근할 수 있도록 허용해두었기 때문에 user나 manager에게도 접근 권한이없다.

이전 방식에서는 SecurityConfig에 하나하나 .antMatchers로 걸어 권한을 주었는데(글로벌로 주고싶을 때),
특정 메소드 하나에 간단하게 권한을 걸고 싶을 때 이 방법을 사용하면된다.


하나 더 알아보자

SecurityConfig 수정


@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig {

prePostEnabled = true를 추가했다.
이렇게하면 preAuthorize 어노테이션이 활성화된다.

IndexController 수정

 @PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
    @GetMapping("/data")
    public @ResponseBody String data(){
        return "데이터 정보";
    }

data() 메소드를 추가했다.
하나에게만 접근권한을 간단하게 주려면 아까처럼 @Secure를 사용하고
이번에는 @PreAuthorize 어노테이션을 사용해 manager와 admin에게 접근 권한을 주었다.

manager, admin으로 접근할 시 나오는 페이지

profile
제로부터시작하는코딩생활

0개의 댓글