Hello

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

볼빵빵오춘기

활동하기