3. 시큐리티 설정
by 볼빵빵오춘기2. sts 재설치 - 생략(나는 IntelliJ 사용 중이므로 생략한다.)
IndexController
- 메소드 몇 가지 만드는데 만든 이유는 해당 페이지에 들어가지나 test하기 위함이다.
- user(),admin() , manager() , login(), join(), joinProc() 함수 만들었다.
- 함수에 @ResponseBody에 붙인 이유는 아직 페이지(html)을 만들지 않았기 때문이다.
- login()은 스프링시큐리티가 낚아채버린다. 그 외는 해당 페이지로 잘 넘어가지는 것을 확인이 가능하다.
@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)가 아닌 주소들은 다 권한이 허용된다.
}
}
더보기
실행결과
실행결과1 ⇒ 권한이 없어 403이 뜬다.
실행결과2 ⇒ 권한 설정하지 않은 다른 페이지들은 잘 들어가지는 것을 확인가능하다.
실행결과3 ⇒ 설정 후엔 login 페이지도 들어가지는 것을 확인된다.
SecurityConfig
코드 추가 후 권한이 있어야만 들어갈 수 있는 페이지(/admin, /manager, /user)들을 들어갈려고 하면 login 페이지로 넘어가진다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("login");
}
'강의 따라하기 > Security1' 카테고리의 다른 글
6. 시큐리티 권한처리 (0) | 2024.02.27 |
---|---|
5. 시큐리티 로그인 (0) | 2024.02.27 |
4. 시큐리티 회원가입 (0) | 2024.01.14 |
1. 환경설정 (1) | 2024.01.14 |
스프링부트 - Security1 프로젝트 (1) | 2024.01.14 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기