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"); }

블로그의 정보
Hello 춘기's world
볼빵빵오춘기