Springboot 로그인(Security) 및 로그아웃 기능

조정우·2025년 4월 4일
0

오늘의 할일 : 로그인 및 로그아웃 기능 구현하기

Security를 설정하는 이유

  • 로그인 페이지를 설정 해줘서 로그인을 하지않으면 못들어가는 페이지를 지정한다
  • 사용자 인증 후 , 성공적인 로그인이나 실패한 로그인 처리를 설정할 수 있다
  • 로그인한 사용자 세션을 관리하고, 세션 타임앗 등을 설정할 수 있다
  • 사용자가 로그아웃할 떄의 동작을 설정 할 수 있어 로그아웃 후에 세션을 무효화 한다
    그 외에도 많은 기능들이 있다 csrf, http 등,,,

@Bean 란


이 메서드는 리턴값을 Spring Container에 등록 하라는 뜻 즉 어떤 코드에 사용되면 그 코드에서 Spring의 빈으로 등록돼서 다른 곳에서 주입해서 사용할수있다

1. PageSecurity 설정

authorizeHttpRequests -> 로그인을 하지 않아도 들어갈수 있는 곳
formLogin -> 현재 로그인이 이루어지는 페이지 성공하면 "/" 로 이동
logout -> 로그아웃 세션 버튼을 눌러서 성고앟면 "/"로 이동

  • HttpSecurity 객체를 사용해서 어떤 URL은 허용할지 , 어떤 URL은 로그인이 필요할지 등 보안정책을 설정해주는 메서드
    invalidateHttpSession(true) -> 세션 무효화 = 로그인 정보 초기화
@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/login", "/board_list","/sign", "/**").permitAll()
                        .anyRequest().authenticated())
                .formLogin((formLogin) -> formLogin
                        .loginPage("/login")
                        .defaultSuccessUrl("/"))
                .logout((logout) -> logout
                        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                        .logoutSuccessUrl("/")
                        .invalidateHttpSession(true))
        ;
        return http.build();
    }

AuthenticationManager - 로그인 유무를 체크 해준다
사용자 로그인 시, 입력한 ID/PW가 맞는지 검사하는 역할을 해.
내부적으로 UserDetailsService, PasswordEncoder 등을 통해 인증 과정을 수행해.

@Bean
    AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }

2. MemberSecurityService

@Override 란


컴파일러가 정확하게 타자를 철자를 적었는지 체크 해주는것 toString O , toStng X 이런식으로 문법이나 철자가 틀리면 오류가 발생 오버드라이딩을 해줌

loadUserByUsername을 구현한 것
UserDetails loadUserByUsername(String username) -> !로그인 시 사용자가 입력한 아이디를 기반으로 해당 사용자의 정보를 DB에서 가져와 Spring Security에게 넘겨준다
유저가 있을경우 member.get() 객체를 가져옴 -> GrantedAuthority 타입으로 저장
username이 "admin"이면 관리자 권한(ROLE_ADMIN) 부여. 아니면 ROLE_USER 부여
return -> 여기서 생성한 객체가 Spring Security에 의해 인증 처리

@Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional<Member> _member = this.memberRepository.findByUserId(username);
        if(_member.isEmpty()){
            throw new UsernameNotFoundException("사용자를 찾을 수 없습니다");
        }
        Member member = _member.get();
        List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
        if("admin".equals(username)){
            grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
        }else{
            grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        }
        return new User(member.getUserId(),member.getUserPassword(), grantedAuthorities);
    }

3. 구현 이미지

로그인 안했을 때 -
로그인 했을 때 -

profile
)개발( 마구잡이로 글쓰기

0개의 댓글