[Spring]Spring Security_2

김피자·2023년 3월 8일
0

Spring

목록 보기
17/28
post-thumbnail
@Controller
public class IndexController {

    @GetMapping({"","/"})
    public String index(){

        return "index"; 
    }
    
    @GetMapping("/user")
    public @ResponseBody String user(){
        return "user";
    }
    
    @GetMapping("/admin")
    public @ResponseBody String admin(){
        return "admin";
    }
    
    @GetMapping("/manager")
    public @ResponseBody String manager(){
        return "manager";
    }
    
    //스프링 시큐리티가 로그인 url을 낚아챈다.
    @GetMapping("/login")
    public @ResponseBody String login(){
        return "login";
    }
    
    @GetMapping("/join")
    public @ResponseBody String join(){
        return "join";
    }
    
    @GetMapping("/joinProc")
    public @ResponseBody String joinProc(){
        return "회원관리 완료";
    }
}

이전 글에서 만들었던 컨트롤러에 아래 메소드들을 추가한다.

/user면 user /admin이면 admin 잘 나오는데

/login을 url로 입력하면 우리가 원하는 login이 아닌 시큐리티 로그인 창이 뜬다. > Security가 login을 가로챘다.

이번에는 이 문제를 해결하고 user 페이지는 user만 접근가능하도록 admin페이지는 admin만 접근가능하도록 하는 등의 설정을 해보자.

SecurityConfig 생성

package com.cos.security1.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity 
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/user/**").authenticated()
                .antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')")
                .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll();

        return http.build();
    }
}

@EnableWebSecurity 어노테이션을 붙이면 스프링 시큐리티 필터가 스프링 필터 체인에 등록된다.

이렇게하고 서버를 실행시키면

로그인 페이지가 뜨던 어제와 달리 인덱스 페이지가 뜨는 것을 확인할 수 있다.

하지만 권한 설정을 한 user, admin, manager로 이동하면 403에러가 뜬다.

그리고 이전과 달리 잘 나오는 로그인(내가만든) 페이지
SecurityConfig 파일 생성 후 권한을 설정하니 시큐리티 login이 작동 안함

SecurityConfig 수정

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/user/**").authenticated()
                .antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')")
                .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll()
                .and()
                .formLogin()
                .loginPage("/login");

        return http.build();
    }

이렇게 하고나면 url에 user, admin, manager을 쳐도

로그인 페이지가 호출된다.

profile
제로부터시작하는코딩생활

0개의 댓글