

DB에서 SQL로 role값만 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는 인증만 되어 있다면, 즉 로그인만 되어 있다면 접근 가능./manager는 ROLE_ADMIN 또는 ROLE_MANAGER권한이 있는 사람만 접근 가능./admin는 ROLE_ADMIN권한이 있는 사람만 접근 가능. @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 = trueprePostEnabled = true @PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
@GetMapping("/data")
@ResponseBody
public String data() {
return "데이터 정보";
}
@Secured는 권한을 1개만 설정, @PreAuthorize는 권한 여러 개 가능.admin뿐만 아니라 manager도 /data에 접근 가능.