개발로드

★KDT 2024-04-05☆SpringBoot-Maven- SpringSecurity 본문

JAVA

★KDT 2024-04-05☆SpringBoot-Maven- SpringSecurity

위대한개발자 2024. 4. 5. 12:54

SecurityConfig 

   @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        //< 요청에 대한 접근 권한을 설정 >
        //#1. 로그인 또는 인증 없이 들어갈 페이지 : 정적 리소스 부분, css, img, js, 상품 상세 페이지 조회..
        //# 2. 로그인 인증 해야 볼 수 있는 페이지 : 상품 주문, 장바구니,게시판 글쓰기,..
        //#3. 관리자 권한이 필요한 페이지 : 상품등록, 회원관리, 게시판 관리, 관리....

        // 모든 사용자에게 허용 : css, js, img,  members, item, imgages
        // Admin역할을 가진 사용자에게만 허용 : /admin/**
        // 나머지 모든 요청은 인증된 사용자에게만 허용, 허용이외의 것은 모든 요청에 대해 기본적인 보안규칙을 정의
        http.authorizeRequests()
                .requestMatchers("/css/**", "/js/**", "/img/**","/member/**").permitAll()
                .requestMatchers("/", "/members/**", "/item/**", "/images/**").permitAll()
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated();


        //사용자 정의 로그인 페이지 및 로그인 처리를 설정
//        http.formLogin()
//                .loginPage("/members/login")   //사용자가 인증되지 않은 경우 이 페이지로 리다이렉트됨
//                .defaultSuccessUrl("/")
//                .usernameParameter("userid")  //email
//                .failureUrl("/members/login/error")
//                .and()  //로그인 설정과 로그아웃 설정을 연결하기 위한 메소드
//                .logout()
//                .logoutRequestMatcher(new AntPathRequestMatcher("/members/logout")) //로그 아웃 요청패턴
//                .logoutSuccessUrl("/");

        //인증이 필요한 리소스에 접근할 때 발생하는 예외 처리-사용자 인증 설정
//        http.exceptionHandling()
//                .authenticationEntryPoint(new CustomAuthenticationEntryPoint() );

        //SecurityFilterChain을 반환
        return http.build();
    }//end of filterChain

 

 

signInController


@PostMapping("/signIn")
public String signIn(@Valid MemberDto memberDto, BindingResult bindingResult, Model model){
    
    //dto 유효성 검사
    if (bindingResult.hasErrors()){
        log.info("dto 유효성에러");
        return "member/signIn";
    }//end of if

    try {
        //비밀번호 암호화해서 객체생성
        Member member = Member.createMember(memberDto, passwordEncoder);
        //생성된 객체 db에 저장(insert)
        //이미가입된 회원있는지 유효성검사
        log.info(member.toString());
        service.saveMember(member);
    }catch (IllegalStateException e){
        //회원가입 실패시 설정해둔 에러메세지를 가지고 다시 회원가입페이지로 이동
        log.info("중복회원 에러");
        model.addAttribute("errorMessage",e.getMessage());
        return "member/signIn";
    }//end of try-catch

return "redirect:/";
}//end of signIn

 

코드설명


 

  1. signIn 메서드는 @PostMapping 어노테이션이 지정된 메서드로, POST 요청을 처리합니다.
  2. @Valid 어노테이션을 사용하여 memberDto 객체의 유효성을 검사합니다. 
  3. 이 유효성 검사는 DTO 객체의 필드에 대한 제약 조건을 검증합니다. 
  4. 유효성 검사가 실패하면 BindingResult 객체에 에러가 저장됩니다.
  5. 유효성 검사가 실패하면 if (bindingResult.hasErrors()) 구문이 실행되어 "member/signIn" 페이지로 다시 리다이렉트되고, 이때 유효성 검사 에러를 처리합니다.
  6. 유효성 검사를 통과하면, Member 객체를 생성합니다. 
  7. 이때, Member.createMember() 메서드를 사용하여 memberDto와 passwordEncoder를 전달합니다. 
  8. 이 메서드는 회원 객체를 생성하고, 비밀번호를 암호화한 후 반환합니다.
  9. 생성된 Member 객체를 데이터베이스에 저장합니다. 
  10. 이미 가입된 회원인지를 확인하고, 중복된 회원이라면 IllegalStateException 예외가 발생합니다.
  11. 예외가 발생하면, catch 블록에서 해당 예외를 처리하고, 에러 메시지를 모델에 추가하여 "member/signIn" 페이지로 이동합니다.
  12. 모든 과정이 정상적으로 진행되면, 회원가입이 완료되었으므로 메인 페이지로 리다이렉트합니다.
  13. 이 코드는 회원가입 과정을 담당하며, 유효성 검사, 비밀번호 암호화, 중복 회원 확인 등을 처리합니다.

 


여유가 되신다면 제 GitHub에 오셔서 좋은 코드들을 구경해주세요!

 

https://github.com/gimpo5975?tab=repositories

 

gimpo5975 - Overview

gimpo5975 has 6 repositories available. Follow their code on GitHub.

github.com