Java/Spring

[Spring] λ¦¬λ‹€μ΄λ ‰μ…˜ν•œ νšŸμˆ˜κ°€ λ„ˆλ¬΄ λ§ŽμŠ΅λ‹ˆλ‹€.

벼리01 2024. 3. 24. 15:38

πŸ“Œν™˜κ²½

IntelliJ Ultimate

Java 17

SpringBoot 3.2.3

 

πŸ“Œλ¬Έμ œ

μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°λ‘œ νšŒμ› 둜그인 및 둜그인된 μ‚¬μš©μžλ§Œ μ ‘κ·Όν•  수 μžˆλŠ” νŽ˜μ΄μ§€λ₯Ό μ„€μ •ν•˜λ˜ 도쀑 ν•΄λ‹Ή 였λ₯˜λ₯Ό λ°œκ²¬ν•¨.

μΏ ν‚€λ₯Ό μ‚­μ œν•΄λ„ λ¬Έμ œκ°€ μ§€μ†μ μœΌλ‘œ λ°œμƒν•˜μ—¬ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 글을 μž‘μ„±ν•œλ‹€.

 

 

1. `/`λŠ” 메인 인덱슀둜 λͺ¨λ“  μœ μ €κ°€ μ ‘κ·Όν•  수 있고, `/member/**`λŠ” `MEMBER` κΆŒν•œμ„ κ°€μ§„ μ‚¬μš©μžλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.

2. `/member`에 μ ‘κ·Όν•  경우 μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈν•˜μ§€ μ•Šμ•˜κ±°λ‚˜ `MEMBER` κΆŒν•œμ΄ μ—†μœΌλ©΄ `/member/login`으둜 νŠ•κ²¨λ‚˜κ°€μ•Ό ν•œλ‹€. 

 

μ΄λ•Œ 둜그인 ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ `/member`둜 μ ‘κ·Όν•  경우 `/member/login`으둜 κ°€μ§€ μ•Šκ³  μœ„μ™€ 같은 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.

 

 

πŸ“Œν•΄κ²°

κ²°λ‘ λΆ€ν„° λ§ν•˜λ©΄ `/member/login` νŽ˜μ΄μ§€λ₯Ό `MEMBER` κΆŒν•œμ„ κ°€μ§„ μ‚¬μš©μžλ§Œ 접속할 수 μžˆλ„λ‘ ν—ˆμš©ν•˜λŠ” μ•„μ΄λŸ¬λ‹ˆλ₯Ό μ €μ§ˆλ €κΈ° λ•Œλ¬Έμ΄λ‹€. λ‘œκ·ΈμΈμ„ ν•΄μ•Όλ˜λŠ”λ° λ‘œκ·ΈμΈν•˜λ €λ©΄ κΆŒν•œμ΄ ν•„μš”ν•˜κ³  κΆŒν•œμ΄ ν•„μš”ν•œλ° 둜그인 ν•΄μ•Όν•˜κ³  λ‘œκ·ΈμΈμ„ ν•΄μ•Όλ˜λŠ”λ° κΆŒν•œμ΄ ν•„μš”ν•˜κ³  κΆŒν•œμ΄ ν•„μš”ν•œλ° 둜그인 ν•΄μ•Όν•˜κ³  λ‘œκ·ΈμΈμ„ ν•΄μ•Όλ˜λŠ”λ° κΆŒν•œμ΄ ν•„μš”ν•˜κ³  κΆŒν•œμ΄ ν•„μš”ν•œλ° 둜그인 ν•΄μ•Όν•˜κ³  μ˜μ›νžˆ λ„λŠ” while문처럼 λ¬΄ν•œ 루프λ₯Ό λ²—μ–΄λ‚˜μ§€ λͺ»ν•΄ νŽ˜μ΄μ§€κ°€ μ—λŸ¬λ₯Ό λ„μš°λŠ” 것.

 

`/member/login`의 url이 `member`둜 μ‹œμž‘ν•œλ‹€κ³  `RequestMapping("member")`λ₯Ό μ„€μ •ν•œ `MemberController`에 λ„£μ–΄λ‘” 것이 ν™”κ·Όμ΄μ—ˆλ‹€. 

 

@Controller
@RequestMapping("/member")
@Slf4j
@RequiredArgsConstructor
@PreAuthorize("hasAnyRole('MEMBER')")
public class MemberController {

    private final MemberService memberService;


    @GetMapping("/")
    public String index(){
        return "index";
    }


    @GetMapping("/login")
    public void loginGET(String error, String logout){
        log.info("Member login get......");
    }


}

 

 

 

λ¬΄ν•œ 루프λ₯Ό νƒˆμΆœν•˜κΈ° μœ„ν•΄ `/member/login`을 μΈμ¦λ˜μ§€ μ•Šμ€ μ‚¬μš©μžλ„ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€μ •ν•΄μ€€λ‹€. 

 

 

@Controller
@Slf4j
public class HomeController {

    @GetMapping("/")
    public String index(){
        return "/index";
    }

    @GetMapping("/member/login")
    public void loginGET(String error, String logout){
        log.info("Member login get......");
    }

}

 

 

@Configuration
@Slf4j
@EnableMethodSecurity(prePostEnabled = true)
public class CustomSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

//        ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•˜λ©΄ ν•„ν„°λ₯Ό μ»€μŠ€ν…€ν•  수 있음

        http.authorizeHttpRequests(request ->
                        request.requestMatchers("/", "/member/login", "/css/**", "/img/**", "/js/**")
                                .permitAll()
                                .anyRequest()
                                .authenticated())
                .formLogin(formLogin -> formLogin.loginPage("/member/login").loginProcessingUrl("/member/login"))
                .csrf(AbstractHttpConfigurer::disable);


        return http.build();

    }
    
...

}

 

 

ν™©λ‹Ήν•œ μ‹€μˆ˜μ§€λ§Œ μ˜μ™Έλ‘œ 많이 κ²ͺ을 것 κ°™μ•„μ„œ μž‘μ„±ν•΄λ‘”λ‹€.