소개
게시글
질문&답변
2024.02.26
Spring Security 와 JWT 난관에 봉착했습니다...
안녕하세요? 도움이 될 지 모르겠지만 답변 남겨봅니다. 먼저 WebSecurityConfig 클래스에서 anyRequests().authenticated() 가 어디까지 제한을 거는 지 알고 가면 좋을 듯 합니다. 저는 저 제한이 어디까지 적용되는지 몰라서 저라면 requestMatcher(new AntPathRequestMatcher("/test/**")).authenticated() 처럼 인증이 필요한 부분에 인증이 되도록 걸어둘 것 같고 그러면 코드 의미가 더 명료해질 것 같습니다. 그리고 토큰이 콘솔 부분으로 잘 찍힌다면 발급이 잘 된 것으로 생각됩니다. ㅎㅎ..
- 0
- 1
- 648
질문&답변
2023.12.01
@Getter 애노테이션 역할
@Getter 애노테이션은 다른 클래스에서 해당 클래스의 변수를 확인할 수 있게 하기 위해 필요합니다. 원래는 code변수와 message 변수를 가져가서 볼 수 있도록 getCode(), getMessage() 라는 메서드로 다음과 같이 사용할 수 있습니다. 하지만 Lombok에서는 편의성을 제공하는 어노테이션으로 @Getter를 제공합니다. @RequiredArgsConstructor public class ErrorResponse { private final String code; private final String message; public String getCode() { return code; } public String getMessage() { return message; } @Getter를 사용하면 아래와 같이 가독성이 좋아지고, 간결해집니다. @Getter @RequiredArgsConstructor public class ErrorResponse { private final String code; private final String message; } 예시를 들어보겠습니다. 먼저 Test 클래스의 main 함수에 code 401, message Unatuhorized라는 ErrorResponse 객체를 만들었다고 하겠습니다. public class Test { public static void main(String[] args) { String code = "401"; String message = "Unauthorized"; ErrorResponse testResponse = new ErrorResponse(code, message); } } 위의 코드에서 'Response의 code가 401 이면 권한을 주라 메시지를 출력하라'라는 코드를 만든다고 할 때 Getter가 없다면 다음과 같이 testResponse의 code를 확인할 수 없게 됩니다. (사진) code, message를 확인기 위해서는 위해서는 Getter가 필요합니다. (사진) @Getter 설정을 했고 예시 코드를 모두 작성했습니다. 이제 실행시켜보겠습니다. public class Test { public static void main(String[] args) { String code = "401"; String message = "Unauthorized"; ErrorResponse testResponse = new ErrorResponse(code, message); String testResponseCode = testResponse.getCode(); if (testResponseCode.equals("401")){ System.out.println("권한을 주세요."); } } } 출력값 : 권한을 주세요. 결론 : @Getter를 꼭 써야 하는 건 아니지만 그럴려면 get 메서드를 만들어서 변수를 확인할 수 있게 해줘야 합니다.. 학습 단계 또는, 초기 개발 단계에서 get 메서드를 관리하는 것이 불필요하다면 @Getter를 사용하는게 편의성과 가독성에 좋습니다.
- 1
- 1
- 398
질문&답변
2023.11.30
/api/hello에 접근이 안됩니다 ㅠㅠ
스프링부트의 build 종속성에 spring security가 들어 있으면 자동적으로 시큐리티가 활성화 됩니다. 따라서 @EnableWebSecurity를 빼셔도 시큐리티가 작동하고 api 요청에 대한 권한이 필요한데 이 부분이 없기 때문에 401 unauthorized가 발생합니다. 간단한 방법 두 가지를 제안해 드리는데 문제 해결에 도움이 됐으면 좋겠습니다. 1. 종속성에서 spring security를 빼고 종속성을 새로 고침해주세요. 물론 이렇게 할 경우에는 시큐리티가 비활성화됩니다. 2. 스프링 시큐리티를 활성화 하고 싶은데 잘 안되는 거라면 아래의 코드처럼 진행해보시면 좋겠습니다. 특별한 이유로 new AntPathRequestMatcher를 써야한다면 사용방법을 익히시고 공식문서에서 해당 클래스의 사용 방법에 대한 제안하는 부분이 나와 있으므로 그 부분을 참고하시어 사용해보시면 좋을 것 같습니다. ㅎㅎ https://docs.spring.io/spring-security/reference/5.8/migration/servlet/config.html @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests((registry) -> registry.requestMatchers("/api/hello") .permitAll() .anyRequest().authenticated()) .build(); }
- 0
- 1
- 776
질문&답변
2023.11.30
mysql 설정로 실습시
spring.jpa.defer-datasource-initialization = true 해당 설정으로 data.sql, schema.sql 의 sql 파일을 읽는 것으로 알고 있습니다. 테이블 만드는 부분은 schema.sql로 따로 만들고 데이터 넣는 부분은 그대로 data.sql로 만들어주세요. 그리고 spring.jpa.hibernate.ddl-auto =create 이 ddl-auto 설정은 none으로 설정하고 실행하면 되지 않을까.. 생각합니다
- 0
- 2
- 614