@GetMapping("/user")
public @ResponseBody String user(){
return "uesr";
}
@GetMapping("/admin")
public @ResponseBody String admin(){
return "admin";
}
@GetMapping("/manager")
public @ResponseBody String manager(){
return "manager";
}
// 스프링시큐리티 해당주소를 낚아채버린다.
@GetMapping("/login")
public @ResponseBody String login(){
return "login";
}
@GetMapping("/join")
public @ResponseBody String join(){
return "join";
}
@GetMapping("/joinProc")
public @ResponseBody String joinProc(){
return "회원가입 완료됨!";
}
SecurityConfig
IndexController에서 만든 함수를 통해 해당 페이지에 들어가는 것을 확인했다.
하지만 여기서 원하는 것은 url에
/user 라고 붙으면 user 권한이 있는 사람에게만 보여주고
/admin이 붙을 경우에는 admin 권한이 있는 사람에게만
/manager가 붙을 경우에는 manager권한이 있는 사람에게만 페이지를 보여주고 싶다.
@Configuration // 시작할 때 메모리에 떠야하므로
@EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 된다. // 활성화
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable(); // crsf를 비활성화
http.authorizeRequests()
.antMatchers("/user/**").authenticated() // /user 이 주소로 들어오면 인증이 필요해!
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')") // /manager 주소로 들어오면 인증뿐만아니라 권한이 ADMIN or MANAGER 권한이 있는 사람만 들어갈 수 있어!
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") // /admin 주소로 들어오면 인증뿐만아니라 권한이 ADMIN 권한이 있는 사람만 들어갈 수 있어!
.anyRequest().permitAll(); // 위의 주소(/user, /manager, /admin)가 아닌 주소들은 다 권한이 허용된다.
}
}