Java Spring Boot 007-2 | Login 기본

Yunny.Log ·2022년 3월 14일
0

Spring Boot

목록 보기
35/80
post-thumbnail

Login 기본

Login 기능 구현해보기

build.gradle

plugins {
	id 'org.springframework.boot' version '2.5.11'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
	runtimeOnly 'com.h2database:h2'
	runtimeOnly 'mysql:mysql-connector-java'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'
}

tasks.named('test') {
	useJUnitPlatform()
}
  • security를 추가함으로써 로그인, 유저 기능 생성

config.WebSecurity

@Configuration
@EnableWebSecurity
//Security 기본 설정 가능케 해주는 것들
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    private final UserDetailsService userDetailsService;
    private final NaverOAuth2Service oAuth2UserService;

    public WebSecurityConfig(
            @Autowired CustomUserDetailsService customUserDetailsService,
            @Autowired NaverOAuth2Service oAuth2UserService
    ){
        this.userDetailsService = customUserDetailsService;
        this.oAuth2UserService = oAuth2UserService;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(this.userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        		//허락할 응답
                .authorizeRequests() 
                //url 조작해줄 것
                .antMatchers(
                        "/home/**",
                        "/user/signup/**",
                        "/",
                        "/css/**",
                        "/images/**",
                        "/js/**"
                )
                .anonymous() // 익명의(로그인 안한) 사람도 허용
                .anyRequest() //나머지 url에 대한 모든 request
                //따라서 마지막에 넣어주어야 한다
                ___________________________________//이 위 기준으로는 누구나 허용
                _________________________________아래부터는 권한 있는 사람만 허용
                //로그인, 사용자 인증을 요구
                .authenticated()
                .and()
                .formLogin()
                .loginPage("/user/login") // 우리가 만든 로그인 페이지 사용할 것임
                .defaultSuccessUrl("/home")
                .permitAll() // 모든 권한의 유저를 허용
                .and()
                .logout()
                .logoutUrl("/user/logout") //로그아웃 시 돌아갈 url
                .logoutSuccessUrl("/home")
                .deleteCookies("JSEESIONID") //세션에 저장된 아이디값 삭제
                .invalidateHttpSession(true)
                .permitAll()
        ;
    }
}

.and() : 요청 수행 들어왔을 때 처리해줄 추가적 옵션

설명 참조 블로그 : https://kimchanjung.github.io/programming/2020/07/02/spring-security-02/

  • WebSecurityConfigurerAdapter 를 조작하는 것
    • configure :
      authorizeRequests : 어떤 응답을 허용하고 허용하지 않을 것인지
      antMathchers : 특정 리소스에 대해서 권한을 설정
      permitall : antMatchers 설정한 리소스의 접근을 인증절차 없이 허용
      authenticated : 로그인 된 유저인 지 아닌 지 구분
      antMatchers : 설정한 리소스의 접근을 인증절차 없이 허용, 모든 리소스를 의미
  • .formLogin() : 로그인 페이지와 기타 로그인 처리 및 성공 실패 처리 사용
  • loginPage : 사용자가 따로 만든 로그인 페이지를 사용하려고 할때 설정
    => 디폴트 URL이 “/login” (스프링 제공 기본 로그인페이지 등장)
  • defaultSuccessUrl : 정상적으로 인증성공 했을 경우 이동하는 페이지를 설정
    => 디폴트값은 “/”

커스텀 로그인 페이지

  • 디폴트 로그인 페이지 사용하기 싫을 때

인증이 필요한 경로 구분, 로그인 상태에 따른 화면 구분

  • 로그인 전
  • 로그인 진행
  • 로그아웃
    => 각각마다 위의 코드에서 주어준 것처럼 적절한 url을 반환하도록 하는 방식
  • 디폴트로 제공되는 방식있지만, 적절히 커스터마이징 가능

0개의 댓글