spring - 29일차
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 부분이다.
우선적으로, 기능을 구현 한 뒤 해당 부분을 연구해보고 어떻게 적용할 것인지를 논의해야한다.