묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
gradle 관리 방법에대한 의견이 궁금해 문의남깁니다!
안녕하세요!코프링 대신에 자프링부터 들렀습니다 ㅎㅎ 기존에 maven만 사용해봐서 신규 플젝도 maven으로 생성했는데.. gradle을 이참에 배워보려고 합니다!! gradle이 groovy랑 kotlin 2가지 언어로 나뉜 것 같은데 영상에서 그루비를 선택하신 이유가 있을까요?혹시 기존 프로젝트도 그루비를 사용하시는거라면 이유가 궁금합니다! 많은 부분을 사용하는건 아니더라도 추후 코프링을 사용한다면 그레이들또한 코틀린으로 관리하는게 더 편하지 않을까 싶어서요!
-
미해결실습으로 배우는 선착순 이벤트 시스템
마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??
Producer 에는 제대로 값이 찍히는데하지만 테스트 자체는 실패했는데요아마 mysql과 연결이 되지 않아서 생긴 오류라고 봐도 될까요?? 아직 뒷 강의는 진행하지 않았습니다!!
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의가 재생되지 않습니다.
섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의가 재생되지 않습니다.크롬으로 보던 중 무한로딩이 떠서 시크릿모드 및 다른 브라우저로 시도해봤지만 여전히 재생되지 않습니다.다른 영상은 잘 재생되는데, 섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의만 재생되지 않네요. 확인 한 번 부탁드립니다!
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticationManager가 부모 AuthenticationManager를 가지는 이유를 모르겠어요
AuthenticationManager가 부모 AuthenticationManager를 가지는 이유를 모르겠습니다. 매니저는 프로바이더를 여러 개 가질 수 있는데, 굳이 부모 매니저를 추가로 가질 수 있도록 해서 부모의 프로바이더를 사용해야할 이유가 있을까요? 그리고 그렇게 사용하는 적절한 예시가 있을까요?
-
미해결스프링 배치
jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)
안녕하세요커서방식에서 Jdbc는 최초 open 메서드 호출 때 db에 쿼리를 날려 ResultSet 첫번 째 row를 가져온 상태에서 read() 를 반복해서 db resultset 커서를 하나씩 이동 시켜 스트리밍 방식으로 가져오는 걸로 알고 있습니다.jpa도 마찬가지로 최초 open 메서드에 쿼리를 날려 작업 결과를 가져오는데 이 때 ResultStream을 반환하고 read에서 실제 db와 상호작용하지 않고 list의 반복자 패턴으로 하나씩 가져온다고 이해했는데요. read때 db와 상호작용을 하지 않는다고 하면 처음 ResultStream에 결과를 다 가져온다는 소리인데 이렇게 되면 메모리 효율이 떨어지지 않나요?
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
비즈니스 로직 담당 서비스
비즈니스 로직만을 담당하는 BookApplicationService 를 두는게 새롭고 좋은 구조 아닐까 생각이 들어서 제 생각이 맞는지 궁금해서 여쭙습니다. Query 이름의 서비스는 조회만을Command 는 등록, 수정, 삭제 담당하는 것이고 또한 이런 서비스 구조가 순환참조 발생 가능성도 줄일 수 있겠죠? p.s 강의 잘 듣고 있습니다. 처음 겪어보는 내용들이 많아서 재밌고 배울게 많네요. 강의 빨리 더 내주십시오.
-
해결됨스프링 시큐리티
[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈
@EnableGlobalMethodSecurity 애노테이션이 설정되어있는 곳 모두 찾아서 주석 처리@Order(0) //@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) @EnableWebSecurity @Configuration public class SecurityConfig2 extends WebSecurityConfigurerAdapter {@Order(1) @Configuration //@EnableGlobalMethodSecurity(securedEnabled = true) @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 git bash로 빌드하고 실행할때 뜨는 에러(자바경로 위치관련에러)
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation. 라고 뜨는데 따로 인텔리제이 설치하며 자바는 따로 설치 안했어요어떻게 하면 좋을까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스연동문제
해당 오류들이 나오면서 h2베이스에 연동이 되지 않습니다 ㅠㅠ 해결하는 방법이 있을까요?2024-11-01T15:11:48.474+09:00 ERROR 84212 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum2024-11-01T15:11:48.475+09:00 WARN 84212 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum2024-11-01T15:11:48.480+09:00 INFO 84212 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2024-11-01T15:11:48.495+09:00 INFO 84212 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.2024-11-01T15:11:48.506+09:00 INFO 84212 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-11-01T15:11:48.548+09:00 INFO 84212 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-11-01T15:11:48.627+09:00 ERROR 84212 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1775) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1173) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:936) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) ~[spring-boot-3.2.0.jar:3.2.0] at jpabook.jpshop.JpashopApplication.main(JpashopApplication.java:10) ~[main/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.0.jar:3.2.0]Caused by: org.hibernate.AnnotationException: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum at org.hibernate.boot.model.internal.BasicValueBinder.prepareBasicAttribute(BasicValueBinder.java:805) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.BasicValueBinder.setType(BasicValueBinder.java:374) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.makePropertyAndValue(PropertyBinder.java:261) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:297) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.createBasicBinder(PropertyBinder.java:1169) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.bindBasic(PropertyBinder.java:1071) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.bindProperty(PropertyBinder.java:890) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.buildProperty(PropertyBinder.java:788) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.processElementAnnotations(PropertyBinder.java:709) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.processIdPropertiesIfNotAlready(EntityBinder.java:977) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.handleIdentifier(EntityBinder.java:305) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.bindEntityClass(EntityBinder.java:231) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.AnnotationBinder.bindClass(AnnotationBinder.java:422) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:255) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:278) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:321) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1822) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1771) ~[spring-beans-6.1.1.jar:6.1.1] ... 19 common frames omittedDisconnected from the target VM, address: '127.0.0.1:55744', transport: 'socket'Process finished with exit code 0
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
index.html
안녕하세요? 강의 잘 보고 있습니다.html 코드가 없어 커뮤니티에 와보니 없는게 맞는거군요.강사님과 같은 화면을 만드려면 직접 html 태그 넣어서 만듦강사님이 보내주는 코드를 넣음두가지 방법인거죠?
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
unique 작성법
@Table 애노테이션을 써서 unique 를 설정하셨는데,@Column(unique = true) 로 설정하는 방법을 사용하지 않으신 이유가 있나요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring java 23설치했습니다.
제가 java기초강의에서 java23으로 공부했었는데이에따라 spring설치시 java23을 설치했습니다괜찮을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실행문이 다르게 나옵니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]8080도 뜨지않고 메인 코드를 실행한후 사이트에 들어가도 에러메세지가 나오지 않습니다. 아래 다르게 나오는 출력문입니다.오후 7:46:36: 실행 중...> Task :helpWelcome to Gradle 8.10.2.To run a build, run gradle <task> ...To see a list of available tasks, run gradle tasksTo see more detail about a task, run gradle help --task <task>To see a list of command-line options, run gradle --helpFor more detail on using Gradle, see https://docs.gradle.org/8.10.2/userguide/command_line_interface.htmlFor troubleshooting, visit https://help.gradle.orgBUILD SUCCESSFUL in 122ms1 actionable task: 1 executed오후 7:46:37: 실행이 완료되었습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService에서 MemberRepository를 참조하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 듣다가 문득 궁금하여 질문드립니다.보통 Repository를 바로 접근하지 않기 위해서 Service를 만드는 건데, OrderService에서 MemberRepository에 바로 접근한 것은 OrderService 또한 같은 Service 단계이기 때문인가요?
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
카카오연동이후 product 사진 깨지는현상
왜그런지 궁금해서 post맨으로 product read할때header에 accessToken넣고 요청보내봤는데 정상호출이됩니다근데.리액트에서 만든 인터셉터에서 에러 메시지를 받으면 원래요청에 새로운 엑세스 토큰 넣어서해주는 기능이있는걸 봤어요 어> 근데 이러면 사진이 안깨져야 말이맞지않나요?어디서 잘못된건지 잘 모르겠어서 질문드립니다
-
해결됨스프링 시큐리티 OAuth2
SPA의 로그인 페이지 사용하면서 자체 인가 서버 구성하는 법
SPA로그인 페이지 사용 아직 시도중이지만 시큐리티필터체인의 http. .... .login() .loginProcessingUrl()로 해결 볼 수 있을 거 같아서 자세한 질문은 삭제하겠습니다..!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
디버깅모드 에러
ErrorDecoder를 이용한 예외 처리강의 15:00 에order_service: url: http://ORDER-SERVICE/order-service/%s/orders exception: order_is_emptyda: User's order is emptyimda2이렇게 설정하고 http://127.0.0.1:8000/user-service/users/[userid]돌리니까디버깅모드에서 getProperty가 Invalid expression : ) 로 표시됩니다 resume 하면 제대로 postman에 적용되긴합니다. 거의 똑같이 썻는데 왜 저는 저렇게 디버그 모드에서 invalid expression이라고 떠서 확인을 못하게 뜰까요 스프링부트3.3 jdk 17입니다 intellij
-
미해결스프링 시큐리티 OAuth2
claims 공개/비공개 개념 질문
{ "sub" : "1234567890", "iss" : "onjsdnjs.com" // 등록된 클레임 "exp" : 192630000 "https://onjsdnjs.com/claims/job" : "developer" //공개 클레임 "userId" : "leaven" // 비공개 클레임 "username" : "onjsdnjs" }공개와 비공개 개념이 있습니다.어디에 혹은 어느 대상에 공개를 한다는 것인지 설명이 없어 문의 드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
H2 DB를 MySql로 마이그레이션
[질문 내용]H2의 Table과 Data를 MySql로 변환해서 쓰고 싶으면 어떻게 해야 할까요?
-
해결됨스프링 시큐리티
AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우
@Order(0) @Configuration @EnableWebSecurity public class SecurityConfig2 extends WebSecurityConfigurerAdapter { @Autowired private SecurityResourceService securityResourceService; @Autowired private FormAuthenticationDetailsSource authenticationDetailsSource; @Autowired private AuthenticationSuccessHandler customAuthenticationSuccessHandler; @Autowired private AuthenticationFailureHandler customAuthenticationFailureHandler; private String[] permitAllPattern = {"/", "/login", "/user/login/**"}; @Bean public PermitAllFilter customFilterSecurityInterceptor() throws Exception { PermitAllFilter permitAllFilter = new PermitAllFilter(permitAllPattern); permitAllFilter.setSecurityMetadataSource(urlFilterInvocationSecurityMetadataSource()); permitAllFilter.setAccessDecisionManager(affirmativeBased()); permitAllFilter.setAuthenticationManager(authenticationManagerBean()); return permitAllFilter; } private AccessDecisionManager affirmativeBased() { AffirmativeBased affirmativeBased = new AffirmativeBased(getAccessDecisionVoters()); return affirmativeBased; } private List<AccessDecisionVoter<?>> getAccessDecisionVoters() { List<AccessDecisionVoter<? extends Object>> accessDecisionVoters = new ArrayList<>(); accessDecisionVoters.add(new IpAddressVoter(securityResourceService)); accessDecisionVoters.add(roleVoter()); return accessDecisionVoters; } @Bean public RoleHierarchyVoter roleVoter() { RoleHierarchyVoter roleHierarchyVoter = new RoleHierarchyVoter(roleHierarchy()); return roleHierarchyVoter; } @Bean public RoleHierarchyImpl roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); return roleHierarchy; } @Bean public FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception { return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject(), securityResourceService); } private UrlResourcesMapFactoryBean urlResourcesMapFactoryBean() { UrlResourcesMapFactoryBean urlResourcesMapFactoryBean = new UrlResourcesMapFactoryBean(); urlResourcesMapFactoryBean.setSecurityResourceService(securityResourceService); return urlResourcesMapFactoryBean; } @Bean public AuthenticationProvider authenticationProvider() { return new FormAuthenticationProvider(passwordEncoder()); } @Bean public AccessDeniedHandler accessDeniedHandler() { CustomAccessDeniedHandler accessDeniedHandler = new CustomAccessDeniedHandler(); accessDeniedHandler.setErrorPage("/denied"); return accessDeniedHandler; } @Bean public AuthenticationSuccessHandler ajaxAuthenticationSuccessHandler() { return new AjaxAuthenticationSuccessHandler(); } @Bean public AuthenticationFailureHandler ajaxAuthenticationFailureHandler() { return new AjaxAuthenticationFailureHandler(); } @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(AuthenticationManagerBuilder auth) { auth.authenticationProvider(authenticationProvider()); } @Override public void configure(WebSecurity web) { web.ignoring() .requestMatchers(PathRequest.toStaticResources() .atCommonLocations()); } @Override protected void configure(final HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/mypage").hasRole("USER") .antMatchers("/messages").hasRole("MANAGER") .antMatchers("/config").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .loginProcessingUrl("/login_proc") .authenticationDetailsSource(authenticationDetailsSource) .successHandler(customAuthenticationSuccessHandler) .failureHandler(customAuthenticationFailureHandler) .permitAll() ; http.exceptionHandling() .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")) .accessDeniedPage("/denied") .accessDeniedHandler(accessDeniedHandler()) .and() .addFilterBefore(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class) ; http.csrf() .disable(); customConfigurer(http); } private void customConfigurer(HttpSecurity http) throws Exception { http.apply(new AjaxLoginConfigurer<>()) .successHandlerAjax(ajaxAuthenticationSuccessHandler()) .failureHandlerAjax(ajaxAuthenticationFailureHandler()) .setAuthenticationManager(authenticationManagerBean()) .loginProcessingUrl("/api/login"); } }