묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Boot JWT Tutorial
@ManyToMany를 일대다 관계로 풀어서 작성중 문제가 생겼습니다...
public class User { @Id @Column(name = "user_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; @Column(name = "username", length = 50, unique = true) private String username; @JsonIgnore @Column(name = "password", length = 100) private String password; @Column(name = "nickname", length = 50) private String nickname; @JsonIgnore @Column(name = "activated") private boolean activated; @OneToMany(mappedBy = "user") private Set<UserAuthority> authorities; }public class UserAuthority implements Serializable{ @Id @ManyToOne @JsonIgnore @JoinColumn(name = "user_id") private User user; @Id @ManyToOne @JoinColumn(name = "authority_name") private Authority authority; } public class Authority { @Id @Column(name = "authority_name", length = 50) private String authorityName; } 이렇게 Entity를 작성했고 @Transactional public User signup(UserDto userDto) { validationUser(userDto); Authority authority = Authority.builder() .authorityName("ROLE_USER") .build(); UserAuthority userAuthority = UserAuthority.builder() .authority(authority) .build(); if(userAuthority.getAuthority() == null){ throw new RuntimeException("권한정보가 없습니다"); } User user = User.builder() .username(userDto.getUsername()) .password(passwordEncoder.encode(userDto.getPassword())) .nickname(userDto.getNickname()) .authorities(Collections.singleton(userAuthority)) .activated(true) .build(); return userRepository.save(user); }UserService는 중간에 UserAuthority로 빌드하는 것을 추가해줬습니다. private org.springframework.security.core.userdetails.User createUser(String username, User user, UserAuthority userAuthority) { if (!user.isActivated()) { throw new RuntimeException(username + " -> 활성화되어 있지 않습니다."); } List<GrantedAuthority> grantedAuthorities = user.getAuthorities().stream() .map(authority -> new SimpleGrantedAuthority(authority.getAuthority().getAuthorityName())) .collect(Collectors.toList()); return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities); }CustomUserDetailService도 String 타입으로 일치 해야 함으로 authority.getAuthorityName()을 authority.getAuthority().getAuthorityName())로 변환해주었습니다. 이후 data.sql의 admin 아이디는 모든 메서드가 잘 되는데 signup으로 회원가입후 getUesr메서드시 권한정보가 넘어오지 못했다는 오류가 발생합니다.2023-06-02 00:43:56.952 ERROR 18668 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.lang.IllegalArgumentException: A granted authority textual representation is required at org.springframework.util.Assert.hasText(Assert.java:289) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.security.core.authority.SimpleGrantedAuthority.<init>(SimpleGrantedAuthority.java:39) ~[spring-security-core-5.7.8.jar:5.7.8] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] at project.hanseovill.security.TokenProvider.getAuthentication(TokenProvider.java:88) ~[main/:na] at project.hanseovill.security.JwtFilter.doFilter(JwtFilter.java:41) ~[main/:na] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 2023-06-02 00:43:56.961 ERROR 18668 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] threw exception java.lang.IllegalArgumentException: A granted authority textual representation is required at org.springframework.util.Assert.hasText(Assert.java:289) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.security.core.authority.SimpleGrantedAuthority.<init>(SimpleGrantedAuthority.java:39) ~[spring-security-core-5.7.8.jar:5.7.8] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] at project.hanseovill.security.TokenProvider.getAuthentication(TokenProvider.java:88) ~[main/:na] at project.hanseovill.security.JwtFilter.doFilter(JwtFilter.java:41) ~[main/:na] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:661) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:427) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:357) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:294) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:373) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:237) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:319) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 2023-06-02 00:43:56.962 ERROR 18668 --- [nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing ErrorPage[errorCode=0, location=/error] java.lang.IllegalArgumentException: A granted authority textual representation is required at org.springframework.util.Assert.hasText(Assert.java:289) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.security.core.authority.SimpleGrantedAuthority.<init>(SimpleGrantedAuthority.java:39) ~[spring-security-core-5.7.8.jar:5.7.8] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] at project.hanseovill.security.TokenProvider.getAuthentication(TokenProvider.java:88) ~[main/:na] at project.hanseovill.security.JwtFilter.doFilter(JwtFilter.java:41) ~[main/:na] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.8.jar:5.7.8] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.27.jar:5.3.27] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) ~[spring-web-5.3.27.jar:5.3.27] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:661) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:427) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:357) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:294) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:373) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:237) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:319) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.74.jar:9.0.74] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 근데 postman 확인시 authorities가 들어갔다고 나옵니다하지만 getUserName을 통해 확인해보면안들어간게 맞습니다...회원가입후 반환하는 값이 authorities안에 authority가 한겹 더있는 상태라 권한정보를 인식을 못하는 것 아닌가라는 생각을 했는데 admin 같은경우에는 잘 됩니다.며칠째 붙잡고있는데 해결을 못하고 물어볼만한 곳이 없어 여기에 남겨봅니다...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
IntelliJ에서 Thymeleaf 자동완성 되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]IntelliJ Ultimate Edition 을 사용하는데요. IntelliJ 는 html 에서 Thymeleaf 자동완성 기능이 없나요?Thymeleaf Plugin 은 설치했습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
요청 데이터 DTO 관리 방법 질문드립니다.
안녕하세요. 프로젝트 진행 중 궁금한 부분이 생겨 질문 드립니다.클라이언트 요청 데이터를 @RequestBody 등으로 DTO 클래스에 매핑하여 사용할 때 DTO 클래스를 각 요청 유형( 생성, 수정, 삭제, 기타, ... )마다 핏하게 생성하는 게 좋은지, 하나의 DTO 클래스에 입력 받은 후 필요한 것만 뽑아 사용하는 것이 좋은지 질문 드립니다.저는 각 요청 유형마다 핏하게 생성한 후 알맞은 유효성 검사를 적용하는 것이 코드 파악 등 유지보수 관점에서 좋다 생각했습니다. 다만 다른 개발자 분께서 요청마다 DTO를 생성하면 클래스가 너무 많아진다는 의견을 주셔서 고민입니다. 저도 느꼈던 부분이기도 했구요.영한님 혹은 다른 서포터즈 분들은 어떤 방법을 선호하시나요? 좋은 방법이 있다면 추천부탁드립니다.
-
해결됨[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
수강 중 질문 있습니다.
이전 강의 영상에 작성한 질문에 이어 질문 드립니다.일단 이중 객체 검출을 수행 해보려 하는데 힘든 부분이 있습니다. 이전 질문에 대해 말씀드리면 먼저 모델로 큰 이미지를 찾고 같은 모델을 사용하여 작은 이미지를 찾는 것 입니다.1. 이 강의 영상 포함하여 dataset이나 yaml파일을 선생님의 깃허브에서 불러오시는데 제가 자체 제작한 dataset은 제 컴퓨터의 로컬에 있습니다.(ex 바탕화면의 image폴더) 이를 불러오려고 구글링 하여 아래 코드를 사용했습니다.folder_path = r"C:\Users\user\Desktop\image"# 폴더 내의 모든 파일을 가져옴file_list = os.listdir(folder_path)위 코드를 사용하면 없는 폴더라고 에러가 뜨더군요.. 혹시 로컬에서 코랩으로 개인 데이터를 가져오는 방법이 있는지 궁금합니다.2. yaml파일이 잘 이해가 되지 않습니다. 일단 이해한 바로는 설정 파일이나 데이터 구조를 표현하기 위해 사용하는 파일 같은데 이전에 yolo inference 강의 영상에선 못 본 것 같아(있는데 못 봤을 수도 있습니다..) 왜 Ultralytics Yolo에는 사용하는지 궁금합니다.위에 말씀드린 것처럼 개인 dataset을 cvat로 200장 정도 만들어 뒀습니다.. 이미지는 블랙박스 이미지로 도로위 번호판을 annotation하여 로컬에 저장했습니다. (class는 '번호판' 하나)이를 위한 yaml파일을 로컬에서 생성하고 업로드 하는 방법이 궁금합니다.원래 yolo v3로 이중 객체 검출을 만들려고 했습니다. 구상한 모델은 일단 yolo inference 강의의 코드로 pre-training된 yolo에 저의 이미지를 업로드 하여 결과 값의 자동차 부분만 crop하여 자동차 부분의 이미지를 폴더에 저장하고 싶습니다.3. 저의 이미지로 모델을 돌리면 사람 자동차 등 80개의 class에 대해 bbox가 나오는데 이 중 특정 class에 대해서만 보고 싶다면 어떻게 해야 할까요?4. yolo의 수행 결과로 bbox가 나오는데 이 bbox의 좌표값으로 원본 이미지를 crop하는 것이 궁금합니다.5. 제가 구상한 모델의 특성 상 test하기가 애매합니다.자동차 부분을 crop하고 번호판을 찾는 것이라 crop한 이미지에 대한 label을 붙이기도 힘들 것 같습니다.따라서 저의 Custom dataset으로 yolo를 학습시켜 inference한 경우와(1), pre-training yolo v3에서 자동차 부분을 찾아(3~4번 질문) 추출된 이미지를 Custom dataset으로 학습 된 yolo(2)의 성능 비교를 하고 싶다면 어떤 방법이 있을까요?마지막으로 yolo v3모델로 하려고 했는데 Custom dataset의 사용과 학습 시키는 것은 Ultralytics Yolo에서 설명 해주셔서 yolo v3모델로의 Custom dataset학습은 힘든가 궁금하기도 합니다.두서 없이 궁금한 부분을 적어 봤는데 긴 질문에 대해 죄송합니다. object detection에 관심이 생겨서 하나하나 공부하고 있는데 하면 할수록 어렵네요 ㅠㅠ...
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
소켓 질문
소켓은 파일이라고 배웟습니다.파일은 hdd에서 접근합니다. 그러면 소켓통신이라는건 서로 다른 프로세스가 hdd 위에서만 데이터를 주고 받는다 라고 이해할 수 잇을까요?그리고 RAM 이나 cpu에 캐시하지 않고 hdd에서만메모리가 이동하는 것인지도 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-g
http://boj.kr/29fb43fd10d44ca584e97162656381a0안녕하세요 선생님 제 코드 맨 밑에 반례가 안돌아가는 논리적 이유를 알 수 있을까요?? 그리고 저는 질문게시판으로 저 반례를 찾은것인데 이러한 애매한 반례는 어떻게 찾는것이 좋을까요? 예를들어 저 반례는 선생님이 설명해주신 최대 최소로 찾을 수 있는 반례가 아닌거 같습니다.제 코드의 33- 37번째줄은 벡터인경우에만 실행이되나요?선생님이 max값을 200000으로 설정하신 이유가 궁금합니다!
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
함수 동작 원리가 궁금합니다.
function checkmood(mood, goodCallback, bacCallback) { if (mood === "good") { goodCallback(); } else { bacCallback(); } } checkmood("good", sing, cry); function sing() { console.log("sing"); } function cry() { console.log("cry"); } checkmood("good", sing, cry) 이 부분에서 sing이 함수이지만 값으로 들어갔는데, 함수 인자는 값으로만 들어가는걸까요?!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka connector mysql 연결 오류
kafka connector mysql 연결 부분에서 오류가 납니다mac m1 환경인데 구글링해도 이유를 모르겠어서 질문 남깁니다
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
혹시 chapter3 파일에서
이렇게 전 갖다대야 뜨는데 강사님처럼 경고창 밑줄에 안갖다대도 경고 뜨게하려면 어떻게해야해요 ?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-g 질문
http://boj.kr/29fb43fd10d44ca584e97162656381a0안녕하세요 선생님 제가 많은 테스트 케이스들이 돌아가는데 맨 아래에 주석으로 넣은 테케가 돌아가지 않습니다. 혹시 제 코드의 논리적 오류가 무엇인지 찾아주실 수 있으십니까?33줄에서부터 37번째줄까지의 코드는 예전에 벡터를 활용할시 잘 돌아갔는데 큐는 저런 코드를 못사용하나요??
-
해결됨두고두고 써먹는 유니티 VR
Player의 유무
안녕하세요 선생님!수업을 정말 잘 듣고 있습니다.감사합니다.다름이 아니라 제가 따로 간단한 vr게임을 만드는중인데 궁금한 점이 생겨 질문드립니다.저는 player를 넣고서 특정 오브젝트에 부딪치면 hp깎이는 식으로 게임을 만드는중인데요!만약 player를 살린다면 player의 hierarchy에서의 위치를 어디다가 배치해야 할 지 알수 있을까요??..Xr origin밑에 player를 자식으로 두고그 자식에 camera offset을 배치했는데이렇게 하면 플레이했을때 방향키를 누르면 player의 움직임이 컨트롤러와의 움직임과 독립적으로 따로 움직이게 되는데 어떻게 구성해야 할 지 조언을 얻을수있을까요??
-
미해결수학으로부터 인류를 자유롭게 하라(기초대수학편)
연장 문의
하루 1강씩 꾸준히 보려고 하는데, 강의 수가 많아서3개월론 안될 것 같아요.. 나중에 수강 연장 해주시나요?
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
저작권 관련 질문이 있습니다.
교육용 프로그램을 만드려고 하는데 일부 버튼 이미지만 그대로 사용해도 될까요?프로그램은 전혀 다른 형태로 만들 예정입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요
안녕하세요. 주문 - 상품 관계가 다대다라서 주문 - 주문상품 - 상품으로 나뉘는건 이해가되는데주문상품에서 가격이랑 개수를 주문에다가 넣어도 상관없지 않을까요?주문상품은 전 그냥 상품과주문을 이어주는 도메인이라고 생각하기 때문입니다.주문상품의 구체적인 역할과 주문상품에 가격과 개수가 들어가는 이유를 알고 싶습니다.감사합니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
사용자가 유효하지 않은 enum 값 유효성 검사
사용자가 유효하지 않은 enum 값을 넘겨줬을 때에 대해서는 어떻게 유효성 검사를 하나요?
-
해결됨확률과 통계 기초
8.3 chi-square에서 자유도가 n. n-1로 나뉘게 되는 것은 random variable이 무엇인지 때문인가요?
Q0. 위 두 가지에서 자유도가 n, n-1로 나뉘는 이유가 궁금합니다Q1. 자유도에 대해서 아래 블로그를 통해서 이해했습니다https://ondemandstore.tistory.com/2위 글의 예시를 통해 보았을 때 자유도 관점에서 어떤 변수 10개 중에 9개를 선택 되었을 때 나머지 1개는 웬만하면 고정되는 게 아닌가 싶습니다. (Q1-1잘못 이해하였다면 자유도가 무엇인지도 궁금합니다)그런데 Chi-sqaure 첫 번째 조건에서 자유도가 n이 되는 이유는 Z가 independent standard normal이라 그런가요? 그렇다고 한다면 independent standard normal의 어떤 특징이 자유도를 n으로 만들게 하는지 궁금합니다Q2. X가 i.i.d normal distribution random variable인것이 chi-squared distribution의 자유도가 n-1이 되게 하는데 큰 영향을 미치나요?어떤 점이 그러한 영향을 미치게 되나요?i.i.d라서 그러한지, i.i.d && normal distribution이라 그러한지 혹은 그 외에 이유가 있는지 궁금합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
p138 배열로 next_permutation
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 배열로 next_permutation할 때int a[3]={1, 2, 3}; void printA(int a[]){ for(int i : a) cout << i << " "; cout << "\n"; } int main(){ do{ printA(a); }while(next_permutation(a, a+3)); } 벡터에서 한 것 처럼이렇게 따로 printA로 함수를 빼서 만들어봤습니다.하지만 for 줄에서[Error] 'begin' was not declared in this scope이런 에러가 나면서 실행이 되지 않는데그 이유가 궁금합니다...교안에서처럼 따로 printA함수를 빼지 않고 for~부분을 그대로 main함수에 작성하면 실행이 됩니다. 그냥 교안처럼 printA따로 안빼고 바로 작성하면 되는건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
선생님 안녕하세요 질문있습니다
저는 지금 학원에서 자바 수업을 듣고있습니다.제가 그동안 다른언어에서 해왔던대로, 또 나도코딩님의 수업에서 했던대로 하니까 강사님이 그건 절차지향적이라고 그렇게 하지 말라고 하던데...알아보니까 그때 강사님이 하신 말씀이 DTO라는 개념이나 자바빈즈 같은 개념이더라구요..이런거 관련해서는 강의하실 생각이 없으신지.. 아니면 어떤 강의를 듣는게 좋을지 조언좀 부탁드립니다..자바 시작한지 얼마 안 됐는데 뭐부터 해야할지 모르겠네요..
-
해결됨홍정모의 따라하며 배우는 C언어
5-2, 초기화와 대
안녕하세요. 강의를 듣던 중 'const int TWO = 2;' 코드가 대입이 아니라 초기화라고 설명하셨습니다.대입과 초기화의 차이가 헷갈립니다.초기화란 처음 어떤 변수에 값을 넣는 과정을 말하는 걸까요?그럼 초기화는 일종의 대입이 아닌가요?
-
미해결PHP 개발자의 최종 테크트리, 라라벨 강의
강의 중간에 vscode 에러나요 ㅠ
셋업 강의 진행하고 몇일지나서다시 하려고 보니깐 우분투가 문제인지 뭐가 문제인지서버는 돌아가는데 모르는 문제들이 많이 발생합니다 ㅠ 첨부터 하려고 해도 못돌아가겠고..봐주실 수 있나요?