inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

버튼 클릭 시 페이지가 로드되지 않는 문제 해결 방법 질문

미해결

개요 로그인 성공 후 인덱스 페이지로 넘어갑니다. 인덱스 페이지에는 "테스트 버튼" 이라는 버튼을 클릭하면, test 로드하는 api 를 호출하도록 했습니다. 그러나 api 요청만 진행되고, 페이지는 바뀌지 않습니다. 개발자도구 메시지에 해당 페이지의 html 코드만 출력됩니다. 참고자료 index.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>인덱스 페이지</title> <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> </head> <body> <h1>환영합니다!</h1> <p>성공적으로 로그인하셨습니다.</p> <button id="logoutButton">로그아웃</button> <button id="testButton">테스트 버튼</button> <script> $(document).ready(function() { // 로그아웃 버튼 이벤트 $('#logoutButton').click(function() { // 로컬 스토리지에서 토큰 제거 localStorage.removeItem('accessToken'); // 로그인 페이지로 리다이렉션 window.location.href = '/login'; }); // 테스트 버튼 이벤트 $('#testButton').click(function() { // 로컬 스토리지에서 토큰 가져오기 const token = localStorage.getItem('accessToken'); if (token) { $.ajax({ url: '/api/test', // 요청할 서버의 URL type: 'GET', // HTTP 메서드 beforeSend: function(xhr) { // 요청 헤더에 토큰 추가 xhr.setRequestHeader('Authorization', token); }, success: function(data) { // 요청 성공 시 로직 console.log("테스트 요청 성공:", data); alert("테스트 요청 성공"); }, error: function(xhr, status, error) { // 요청 실패 시 로직 console.error("테스트 요청 실패:", xhr.responseText); alert("테스트 요청 실패"); } }); } else { alert("토큰이 없습니다. 다시 로그인해주세요."); } }); }); </script> </body> </html> 보이는 것처럼 로컬 스토리지에서 토큰을 가져온 후 요청 헤더에 다시 담아서 전송합니다. JwtAuthorizationFilter @Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException { // 헤더에서 토큰 추출 log.info("헤더에서 토큰 추출"); String tokenValue = jwtUtil.getJwtFromHeader(req); log.info("토큰 : " + tokenValue); if (StringUtils.hasText(tokenValue)) { // 토큰 유효성 검사 if (!jwtUtil.validateToken(tokenValue)) { log.info("Token Error"); return; } Claims info = jwtUtil.getUserInfoFromToken(tokenValue); try { setAuthentication(info.getSubject()); } catch (Exception e) { log.error(e.getMessage()); return; } } else { log.info("토큰이 없습니다."); } filterChain.doFilter(req, res); } // 인증 처리 public void setAuthentication(String loginId) { log.info("인증 성공"); SecurityContext context = SecurityContextHolder.createEmptyContext(); Authentication authentication = createAuthentication(loginId); context.setAuthentication(authentication); SecurityContextHolder.setContext(context); } // 인증 객체 생성 private Authentication createAuthentication(String loginId) { log.info("인증 객체 생성"); UserDetails userDetails = userDetailsService.loadUserByUsername(loginId); return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); } 이렇게 JwtAuthorizationFilter 가 있을 때 헤더에서 토큰이 추출되는 거까지 로그에 다 출력되고, 인증 객체까지 생성되는 걸 확인했습니다. Console 2024-02-26T14:31:24.699+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 토큰 : eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0NiIsImF1dGgiOiJPV05FUiIsImlhdCI6MTcwODkyNDY0NiwiZXhwIjoxNzA4OTI4MjQ2fQ.TLjHCc1_ZtTbzGb-2c0ueLmxgCyxQf1rUQs4DkqMv_c 2024-02-26T14:31:24.706+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 인증 성공 2024-02-26T14:31:24.706+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 인증 객체 생성 Hibernate: /* <criteria> */ select u1_0.id, u1_0.email, u1_0.login_id, u1_0.password, u1_0.role from users u1_0 where u1_0.login_id=? 2024-02-26T14:31:24.722+09:00 INFO 59767 --- [nio-8081-exec-3] TestController : test controller 로그를 보면 test controller 를 호출하는 거까지 확인할 수 있었습니다. 그러나 페이지는 로드되지 않고, 메시지에 html 코드만 출력이 됩니다. 자료 Test.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> <title>Test Page</title> </head> <body> <h1>This is a test page.</h1> </body> </html> 정리 로그인 성공 후 인덱스 페이지로 넘어감 해당 인덱스 페이지에서 test 페이지로 넘어가고자 함 인가 필터 모두 거치고, 토큰 값이 전달되는 거까지 확인했음 test controller 까지 요청되지만, 정작 페이지는 불러와지지 않음 대체 제가 뭘 놓친 걸까요 ㅠㅠㅠㅠ 이거때문에 며칠 동안 머리 싸매고 있습니다,,, 제발 도와주세요,,,

  • java
  • spring
  • jwt
  • secuity
  • javascript
  • mvc
오세창 댓글 1 좋아요 0 조회수 587

안녕하세요! 질문있습니당!

미해결

스프링부트 시큐리티 & JWT 강의

11강 네이버 로그인까지 완료하고 @ AuthenticationPrincipal을 이용해서 로그인한 정보를 가져오려고 하는데, 구글로 로그인했을 때는 정보가 출력되는데, 네이버로 로그인했을 때는 null로 나와서 구글링하며 찾아보았는데 해결이 안 되어서…. 질문 남깁니다.

  • spring
  • spring-security
  • oauth2
댓글 1 좋아요 0 조회수 465

자바 스프링부트 버전 선택

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

스프링부트 버전이 2.7x 버전은 없는데 무엇으로 선택해야 하나요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
댓글 1 좋아요 1 조회수 353

idx, boardGroup 번호에 대해

미해결

스프링 프레임워크는 내 손에 [스프2탄]

idx 는 1번부터 시작하고 boardGroup 은 0번부터 시작하셨는데, boardGroup 도 idx 와 동일하게 1번부터 해도 상관없을까요? 관습적으로 0번부터 하는건지 다른 이유가 있는 건지 궁금합니다.

  • spring
  • jquery
  • mvc
  • jpa
  • spring-security
감자 댓글 1 좋아요 0 조회수 199

login_proc의 존재에 대한 간략한 설명입니다

미해결

스프링 시큐리티

정답부터 말하면 내부적인 정상 처리를 위해 일치시켜줘야 합니다. 이름이 logic_proc일 필요는 없고요 login 폼의 action이랑, 설정에서 등록해주는 loginProcessingUrl과 맞추기만 하면 됩니다. 저는 /login_perform으로 했는데요. 사용자가 로그인 폼에서 아이디와 비밀번호를 입력하면 UsernamePasswordAuthenticationFilter에서 주된 처리를 하게 되잖아요. 본격적인 처리가 들어가기 전에 이 처리를 할지 말지는 요청 Url와 HttpMethod를 검사해야 합니다. 이게 맞아야 해당 요청에 대한 정확한 필터를 작동시키니까요. UsernamePasswordAuthenticationFilter의 실행 여부는 AbstractAuthenticationProcessingFilter가 합니다. doFilter에서 이뤄지죠? 다음 코드를 확인해봅시다. 바로 requiresAuthentication 함수를 디버깅해봅시다. 저matcher에 loginProcessingUrl에서 설정한 Url과 요청Url이 매치되는지 확인합니다. 해당 Url을 matcher에 설정할 때 시큐리티 내부적으로 POST를 이미 넣어줬습니다. 그렇기 때문에 로그인 폼에서 POST 방식을 지정하고 Action Url을 /login_perform 으로 설정하면 시큐리티에서 설정한 값과 동일하므로 이후의 로그인 절차가 진행될 수 있죠. 조금 더 첨언하자면 커스텀 로그인을 하는 순간 로그아웃도 반드시 커스텀해줘야 합니다. 서버 구동 시 설정 쪽에 관련 코드가 있어요. 디폴트 로그인이 아니면 디폴드 로그아웃도 설정 안 한다. 그래서 커스텀 로그인을 하면 DefaultLogoutPageGeneratingFilter가 설정되지 않아요. 그래서 강사님이 /logout 컨트롤러를 생성하신 겁니다. 다시 결론: 로그인 기능을 커스텀할 때 로그인 폼의 action url와 시큐리티에서 loginProcessingUrl은 일치시켜주기만 하면 된다.

  • java
  • spring-boot
  • spring-security
literate_t 댓글 1 좋아요 0 조회수 294

이미 퇴사한 시점에서의 최선의 선택

미해결

백엔드 개발자 성능 개선 초석 다지기

현재 말씀하시는 대상이 완전 저에게 일치하는데 이미 퇴사를 한 시점이라 주니어 개발자로써 적용하기가 쉽지 않을 것 같은데 이럴때 는 어떻게 하는 게 좋을까요? 강의 내용대로 실무내에서는 문제 없이 기능들을 구현하였는데 이직을 위한 이력서 작성 시 성능 개선 부분에서 작성할 부분이 없네요

  • java
  • mysql
  • spring-boot
  • cache
  • index
댓글 2 좋아요 1 조회수 492

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

미해결

스프링 시큐리티

안녕하세요. 지금 개발환경은 스프링부트, 시큐리티 모두 최신 버전입니다. permitAll()로 static resource를 허용하고 싶은데요. 설정을 분리하니까 login 하고 나서 css 파일이 화면에 나타납니다. 로그인 버튼은 top.html에 링크를 추가했습니다. ignoring()을 쓰거나 설정을 통합하면 문제가 해결되긴 합니다. http.authorizeHttpRequests(registry -> registry .requestMatchers("/mypage").hasRole("USER") .requestMatchers("/messages").hasRole("MANAGER") .requestMatchers("/config").hasRole("ADMIN") .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers("/").permitAll() .anyRequest().authenticated()); 하지만 저는 설정을 두 개로 유지하면서, permitAll()을 써도 문제가 없었으면 하는데, 제가 아는 선에서는 방법을 찾기 어려워 질문드리게 됐습니다. @Order(0) @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(registry -> registry .requestMatchers("/mypage").hasRole("USER") .requestMatchers("/messages").hasRole("MANAGER") .requestMatchers("/config").hasRole("ADMIN") .requestMatchers("/").permitAll() .anyRequest().authenticated()); http.formLogin(Customizer.withDefaults()); http.logout(config -> config.logoutSuccessUrl("/")); http.userDetailsService(userDetailsService); return http.build(); } @Order(1) @Bean SecurityFilterChain resource(HttpSecurity http) throws Exception { http.authorizeHttpRequests(registry -> registry .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .anyRequest().authenticated()); return http.build(); } 감사합니다.

  • java
  • spring-boot
  • spring-security
literate_t 댓글 2 좋아요 0 조회수 316

name을 name2로 바꿀려면 어떻게 하나요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. API 강의에서 @ResponseBody를 이용해 JSON 으로 객체를 변환받는 내용의 코드에서 name이 너무많아 반환받는 JSON 키를 "name2"로 변경해보고싶어 코드와 url등등 name2를 넣어 계속 실행해봣지만 계속 키는 "name"에서 변하지가 않습니다. 어디를 변경해야 하는걸까요??

  • java
  • spring
  • mvc
  • spring-boot
이호준 댓글 3 좋아요 1 조회수 370

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

미해결

스프링 시큐리티

안녕하세요! account_roles가 자동 생성되는데 실제로 존재하지 않는 account_id에 대한 데이터가 들어가있습니다. account 테이블에는 아무 값도 없습니다. 생성된 acount가 없는데 왜 이럴까요?..내용만 보면 role이 3개, 2개, 1개씩 들어가는 거 보니 (계층 구조 설정 안 되어 있음) admin 계정엔 3개를 다 넣고, manager엔 2개, user엔 1개 role을 넣어주는 것 같은데 문제는 account 테이블이 비어있다는 점입니다.. ddl-auto: create로 되어 있고 InMemoryUserDetailsManager 이용해서 아무 데이터도 넣어주지 않았습니다. config에서 자원에 권한 부여하면서 resource 테이블이 만들어진 거 같은데 /mypage 경로에 대해서는 안 만들어지는 것 같습니다..이유를 알 수 있을까요?.. .requestMatchers("/mypage").hasRole("USER")

  • java
  • spring-boot
  • spring-security
literate_t 댓글 1 좋아요 0 조회수 205

Result클래스 사용이유

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

@GetMapping(api/v2/members) public Result memberV2 (){...}로 작성되어있습니다. 그런데 그냥 @GetMapping(api/v2/members) public List<MemberDto> memberV2(){...}로 반환하면 되지않나요? 제가 생각하는 Result를 사용한 이유는 count같은 다른 정보들도 넣기 위함인 거 같은데 맞을까요?

  • java
  • spring
  • spring-boot
  • jpa
kongminoo 댓글 1 좋아요 0 조회수 414

jdk 21 콘솔창 출력 한글 깨짐

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

jdk 21로 한글을 출력하려고 하는데 한글이 깨져서 나옵니다. 처음에는 인텔리제이의 문제인가 했는데 이클립스에서도 깨져서 나오는걸 보면 jdk의 문제인 것 같습니다. 이전에 이클립스에서 실행해 본 파일로 그때는 괜찮았으나 지금은 한글이 깨져서 나옵니다. 그래서 jdk의 문제라고 생각했습니다. 저는 jdk를 오라클 open jdk 21 버전을 설치했습니다. 예전에 이클립스에서 사용하던 jdk 버전은 11입니다. 강의에서 하신 것처럼 인텔리제이에서 oracle open jdk 21을 다운로드해도 마찬가지로 깨져서 나옵니다. jdk를 버전을 낮춰야 할지 다른 방법이 있을지 몰라 해결책을 찾다가 여기다 질문해봅니다.

  • java
Kim AJin 댓글 3 좋아요 1 조회수 1475

Transactianl DB 연동 부분 테스트 오류 질문입니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] JPA와 DB 설정, 동작확인 강의 13:41 부분 테스트 실행시 밑에와 같은 오류가 발생합니다. yml 띄어쓰기도 확인했는데 이상이 없습니다. 왜 안될까요.... org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement [Sequence "MEMBER_SEQ" not found; SQL statement: select next value for member_seq [90036-224]] [select next value for member_seq]; SQL [select next value for member_seq] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:277) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:717) at jpabook.jpashop.MemberRepository$$SpringCGLIB$$0.save(<generated>) at jpabook.jpashop.MemberRepositoryTest.testMember(MemberRepositoryTest.java:28) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement [Sequence "MEMBER_SEQ" not found; SQL statement: select next value for member_seq [90036-224]] [select next value for member_seq] at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:66) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:194) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:79) at org.hibernate.id.enhanced.SequenceStructure$1.getNextValue(SequenceStructure.java:100) at org.hibernate.id.enhanced.PooledOptimizer.generate(PooledOptimizer.java:76) at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:555) at org.hibernate.id.IdentifierGenerator.generate(IdentifierGenerator.java:147) at org.hibernate.event.internal.AbstractSaveEventListener.generateId(AbstractSaveEventListener.java:153) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:124) at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:774) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:758) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) at jdk.proxy2/jdk.proxy2.$Proxy102.persist(Unknown Source) at jpabook.jpashop.MemberRepository.save(MemberRepository.java:14) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:351) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ... 8 more Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "MEMBER_SEQ" not found; SQL statement: select next value for member_seq [90036-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readSequence(Parser.java:7678) at org.h2.command.Parser.readTermWithIdentifier(Parser.java:4593) at org.h2.command.Parser.readTerm(Parser.java:4311) at org.h2.command.Parser.readFactor(Parser.java:3343) at org.h2.command.Parser.readSum(Parser.java:3330) at org.h2.command.Parser.readConcat(Parser.java:3305) at org.h2.command.Parser.readCondition(Parser.java:3108) at org.h2.command.Parser.readExpression(Parser.java:3059) at org.h2.command.Parser.parseSelectExpressions(Parser.java:2931) at org.h2.command.Parser.parseSelect(Parser.java:2952) at org.h2.command.Parser.parseQuerySub(Parser.java:2817) at org.h2.command.Parser.parseSelectUnion(Parser.java:2649) at org.h2.command.Parser.parseQuery(Parser.java:2620) at org.h2.command.Parser.parsePrepared(Parser.java:868) at org.h2.command.Parser.parse(Parser.java:843) at org.h2.command.Parser.parse(Parser.java:815) at org.h2.command.Parser.prepareCommand(Parser.java:738) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.server.TcpServerThread.process(TcpServerThread.java:278) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:487) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:93) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:316) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:327) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at com.p6spy.engine.wrapper.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:118) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:94) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:183) ... 38 more

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
wjscksals0702 댓글 2 좋아요 0 조회수 723

아직도 시작을 못하고 있어요,,,,,

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

다음과 같은 오류가 나와서 어떻게 해야할 지 모르겠네요 따로 건든건 없는데요... A problem occurred configuring root project 'library-app'. > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.1. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.0.1 > No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.5' but: - Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') - Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a component, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 11) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') - Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') - Variant 'mavenOptionalRuntimeElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a runtime of a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component compatible with Java 17 and the consumer needed a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') - Variant 'runtimeElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component compatible with Java 17 and the consumer needed a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') - Variant 'sourcesElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a component, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 11) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '7.5') * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
한양을 위하여 댓글 3 좋아요 0 조회수 531

안녕하세요. 익명 객체와 세션 관련 궁금증입니다.

미해결

스프링 시큐리티

실습환경 스프링부트 3.2.2 기준 security 6.2.1 질문 안녕하세요. 빠르게 두 번째 듣고 있습니다ㅋㅋㅋ 첫 번째에는 강의 환경과 맞춰서 들었는데 아무래도 관련 지식이 부족한 채로 듣다 보니까, oauth2 한참 듣고 와서 인증인가 쪽 코드를 슥 보니 전혀 모르겠어서 다시 듣고 있어요ㅋㅋ 질문은 다름이 아니라 지금은 최신 버전으로 듣고 있는데요. 처음에는 버전 차이인 줄 알았더니 아닌 것 같아서요. 익명사용자 인증필터 강의 PPT에서 "세션에 저장하지 않는다"라고 하셨는데 코드 따라가보니까 익명 객체도 세션 저장을 하더라고요. 생각해보면 로그인을 안 해도 브라우저에 session id를 내려주니까 서버에서 session을 유지하고 있어야 할 것 같긴 한데요.. ExceptionTranslationFilter에서 sendStartAuthentication에서 엔트리포인트의 commence 함수를 바로 위에, this.requestCache.saveRequest(request, response)를 쭉 타고 가보면 Request.doGetSession()에서 session을 만들고 반환하는 부분이 있습니다. 로그인 인증 이후에는 session id만 변경하는 로직이 있는 것도 익명 인증 때 이미 session이 존재한다는 걸 뒷받침하는 것 같습니다. 제가 틀린 부분이 있으면 가르침 부탁드립니다.

  • java
  • spring-boot
  • spring-security
literate_t 댓글 1 좋아요 0 조회수 303

OAuth로 Jwt 토큰 인증하기

미해결

스프링부트 시큐리티 & JWT 강의

강의를 모두 수강하였는데요! 한가지 추가적으로 더 배우고 싶은 부분이 있어서 질문 드립니다. 다름이 아니라, 강의에서 Oauth 인증과 Jwt 토큰 인증을 따로 배웠습니다. Oauth2 같은 경우 sns인증을 받아 session을 사용하여 권한 처리가 되었는데, session 말고 JWT를 사용해서 Oauth2 권한 처리하려면 어떻게 해야하는 지 알고 싶습니다. 강사님께서 다른 강의에서 다뤄 주시겠다고 하셨는데, 혹시 해당 강의를 들으려면 어디에서 수강할 수 있을 지 알고 싶습니다!

  • spring
  • spring-security
  • jwt
NaMooJoon 댓글 1 좋아요 1 조회수 480

깃허브 주소를 못 찾겠어요

미해결

스프링 프레임워크는 내 손에 [스프2탄]

스프 2탄 깃허브 주소좀 부탁드립니다 ~

  • spring
  • jquery
  • mvc
  • jpa
  • spring-security
감자 댓글 1 좋아요 0 조회수 294

team.getMembers에 관한 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

em.flush() em.clear를 해야지만 findTeam.getMembers()를 통해서 members조회가 가능하더라구요. 제가 이해한 바로는 Team안에 @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); 이렇게 되어있지만 우리가 members에 대해서 설정한 부분이 없다. 여기까지는 이해했습니다. 그렇다면 이렇게 설정하고 DB에 flush를 하면 JPA가 알아서 Team에 대한 members를 넣어주는건가요? 아니면 em.find(Member.class,member.getId())를 했을 때에 JPA가 members를 찾아주나요? 이것이 궁금합니다.

  • java
  • jpa
서정원 댓글 2 좋아요 1 조회수 430

자바 comparable & comparator..

미해결

안녕하세요 현재 자바의 정석 : 기초편으로 컬렉션 프레임워크를 학습하고 있습니다. 학습 중 comparable과 comparaor가 잘 이해가 되지 않아서 질문을 드립니다. public static void main(String[] args) { String[] strArr = {"cat" , "Dog" , "lion" , "tiger"}; Integer[] intArr = {1,5,3,4,7,2,6}; Arrays.sort(intArr); System.out.println(Arrays.toString(intArr)); Arrays.sort(intArr, new Descending()); System.out.println(Arrays.toString(intArr)); Arrays.sort(strArr); System.out.println("Arrays.sort(strArr) = " + Arrays.toString(strArr)); //정렬한 후 [Dog, cat, lion, tiger] Arrays.sort(strArr , String.CASE_INSENSITIVE_ORDER); System.out.println("strArr = " + Arrays.toString(strArr)); //대소문자 구별 X = > [cat, Dog, lion, tiger] System.out.println(Arrays.toString(strArr)); Arrays.sort(strArr , new Descending()); System.out.println("strArr = " + Arrays.toString(strArr)); } class Descending implements Comparator{ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Comparable && o2 instanceof Comparable ){ Comparable c1 = (Comparable)o1; Comparable c2 = (Comparable)o2; return c1.compareTo(c2)*-1; } return -1; } 현재 제가 이해한 부분은 다음과 같습니다. 정렬은 두 대상을 비교하고 자리바꿈을 하는 것 정렬을 위해서는 정렬에 대한 기준이 필요하다 하지만 Array.sort(strArr); 정렬에 대한 대상은 존재하지만 정렬에 대한 기준이 없다. String , Integer 등과 같은 클래스는 comparable이 구현되어 있다. 따라서 sort메서드를 실행할 때 정렬에 대한 기준이 x => 기본적으로 오름차순으로 정렬한다. strArr은 오름차순으로 정렬된 값이다. Arraty.sort(strArr , String.CASE _INSENSTIVE_ORDER); strArr([Dog, cat, lion, tiger])을 대소문자 상관없이 정렬 따라서 strArr = {cat,Dog, lion, tiger} 순으로 정렬된다. Array.sort(strArr , new Descending()); strArr를 사용자 정의 정렬 기준으로 정렬한다. 제가 이해가 되지 않는 부분은 다음과 같습니다. Descending 클래스를 디버깅을 해보았으며 o1에는 Dog가 들어오고 o2는 cat이 들어가는데 왜 그런지 모르겠습니다. strArr = {cat,Dog, lion, tiger}인데 왜 Dog가 o1에 들어가고 cat이 o2에 들어가고 또한 o2가 더 크니 음수를 리턴하는데 각 각 char의 총합의 차를 반환하는 것인가요? 디버깅 이후 스텝 오버를 해봤습니다. o1에는 lion이 들어가고 o2에는 Dog가 들어가던데 왜 그러한지 잘 모르겠습니다. 그리고 int[]도 확인해보았는데 오름차순으로 정렬되었으니 [1,2,3,4,5,6,7] 이며 Descending에 디버깅을 해보았는데 o1에는 2가 o2에는1이 스텝오버를 하니 o1에는 3이 o2에는 2가 대입되더라구요 이것 또한 잘 이해가 되지 않아서 질문을 드립니다.

  • 자바
  • java
댓글 1 좋아요 0 조회수 366

DAY11 영상에 오타있네요

미해결

기초 알고리즘 코딩테스트 40일 완성 (by 하루코딩)

최댓값 문제 2566번인데 2556번(별 찍기 - 14)로 숫자가 잘못되어있습니다. 수정 부탁드립니다.

  • python
  • java
  • 코딩-테스트
kairs294702 댓글 2 좋아요 0 조회수 294

섹션9 vue

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

섹션9 시작할 때 vue 페이지를 깃헙에만 올려놓은 상태라고 하셨는데 참고해서 학습을 진행하고 싶은데 올려놓으신 깃헙 주소 좀 알려주실 수 있을까요?

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
김영광 댓글 2 좋아요 0 조회수 470

인기 태그

인프런 TOP Writers

주간 인기글