ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 29일차

ssungcohol 2023. 3. 4. 18:03

application.yml vs application.properties

코드에는 분명 이상이 없는것 같았는데 작동이 안됐다...

그 이유는 기존에 사용하던 application.properties 방식에서 application.yml 방식으로 변경했기 때문!

 

그에 따라 properties에서 사용하던 방식을 yml에 맞게 변경해주어야했다.

 

기존 코드 (preperties)

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:db;MODE=MYSQL;
spring.datasource.username=sa
spring.datasource.password=

spring.thymeleaf.cache=false

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

jwt.secret.key=

 

변경 코드(yml)

spring:
  h2:
    console:
      enabled: 'true'
  datasource:
    username: sa
    url: jdbc:h2:mem:db;MODE=MYSQL;
    password: ''
  thymeleaf:
    cache: 'false'
  jpa:
    properties:
      hibernate:
        format_sql: 'true'
        show_sql: 'true'
jwt:
  secret:
    key:

회원가입 경로에는 문제가 없고, 받아오는 것에 대해서도 문제가 없는데

왜 회원가입은 되지 않고 다른 api로 넘어가는 것일까?

 

포스트 맨을 활용하여 기본 회원가입 기능을 구현 한 후 테스트를 했을 때 404에러가 발생했다.

404에러는 서버 자체는 존재하지만, 서버에서 요청한 것을 찾을 수 없을 때 나타나는 에러!

 

원인을 찾아 타고 들어가보니, WebSecurityConfig 클래스에서 문제가 발생 했던 것!

 

        http.authorizeRequests().antMatchers("/api/user/**").permitAll() 
                .antMatchers("/api/search").permitAll()
                .antMatchers("/api/shop").permitAll()
                .anyRequest().authenticated()
                // JWT 인증/인가를 사용하기 위한 설정
                .and().addFilterBefore(new JwtAuthFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);


        http.formLogin().loginPage("/api/user/login-page").permitAll();

        http.exceptionHandling().accessDeniedPage("/api/user/forbidden");

위의 코드에서 

antMatchers("/api/user/**").permitAll() 이 부분에 대해서는 인증이 필요한 부분이었고, 

anyRequest().authenticated() 부분은 anyRequest() 로 인해 인증이 필요 없는 부분이었다.

 

따라서, 해당 부분의 코드를 수정하면

http.authorizeRequests().antMatchers("/api/**").permitAll()
                .anyRequest().authenticated()
                // JWT 인증/인가를 사용하기 위한 설정
                .and().addFilterBefore(new JwtAuthFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);

 

이와 같은 코드로 수정을 하였고, 이를 통해 찾을 수 없는 api 주소로 이동하는 문제를 해결할 수 있었고, 원만한 로그인 또한 가능하였다.

 

위의 부분은 security의 부분으로서 인증이 필요한 부분과 필요없는 부분을 선별하여 인가를 해주는 부분이었던 것이었다.

 

이에 따라 security 에 있어서 무작정 따라할 것이 아니라, 어떤 부분에서 인가를 할 것이고를 확인하고 공부를 해서 적용해할 것이다.

 

공부할 부분 : filter, AOP, interceptor, JWT 탈취와 관련된 refresh토큰, http only cookie 부분이다.

우선적으로, 기능을 구현 한 뒤 해당 부분을 연구해보고 어떻게 적용할 것인지를 논의해야한다.

728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

spring - 32일차  (0) 2023.03.07
spring - 31일차  (0) 2023.03.07
spring - 28일차  (0) 2023.03.04
spring - 27일차  (0) 2023.03.03
spring - 21일차  (0) 2023.02.25