1. 인가(Authorization)
인가(Authorization)는 애플리케이션에서 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지 판단하는 과정.
@Controller
public class IndexController {
@GetMapping({"", "/"})
public String index() {
return "index";
}
@GetMapping("/user")
@ResponseBody
public String user() {
return "user";
}
@GetMapping("/admin")
@ResponseBody
public String admin() {
return "admin";
}
@GetMapping("/manager")
@ResponseBody
public String manager() {
return "manager";
}
@GetMapping("/login")
@ResponseBody
public String login() {
return "login";
}
@GetMapping("/join")
@ResponseBody
public String join() {
return "join";
}
@GetMapping("/joinProc")
@ResponseBody
public String joinProc() {
return "회원가입이 완료되었음.";
}
}
- 현재는 모든 URL에 대해 정상적으로 접속 가능함.
2. SecurityConfig
@Configuration
@EnableWebSecurity
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')")
.anyRequest().permitAll()
}
}
@Configuration
- 스프링 설정 클래스임 나타냄. (빈 등록 및 설정)
@EnableWebSecurity
- 시큐리티 활성화 및 보안 설정. (활성화 시) -> 스프링 시큐리티 필터(SecurityConfig)가 스프링 필터체인에 등록됨.
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
- 해당 주소로 접속 시 로그인뿐만 아니라 권한(admin, manager)도 필요함.
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
- 해당 주소는 admin 권한만 들어갈 수 있음.
.anyRequest().permitAll()
- 위의 URL은 정상적으로 접속이 되지만 아래 URL은 403에러가 발생함.
- 403 에러(403 Forbidden)는 HTTP 상태 응답 코드로 서버에 요청이 전달되었지만 권한 때문에 거절되었다는 것을 의미.
.and().formLogin().loginPage("/login");
- 위의 코드에서 제일 하단에 있는 코드에 주석을 풀면
권한이 없는 URL에 요청할 시 자동으로 /login페이지로 이동시킴.