[SPRING] Grails 플러그인 빈의 오버라이드 메소드
SPRINGGrails 플러그인 빈의 오버라이드 메소드
Spring Security 플러그인은 grails.plugins.springsecurity.SpringSecurityService 유형의 'springSecurityService'라는 bean을 제공합니다. 이 서비스의 getCurrentUser 메소드를 대체해야합니다.
먼저 확장 프로그램을 사용하여 작업을 시도했습니다.
class CustomSecurityService extends SpringSecurityService {
@Override
Object getCurrentUser() {
// my implementation uses methods from the parent class
}
}
플러그인으로 정의 된 bean을 위 클래스의 인스턴스로 대체하기 위해 다음을 resources.groovy에 추가했습니다.
springSecurityService(CustomSpringSecurityService)
하지만 SpringSecurityService (확장중인 클래스)의 종속성이 설정되지 않아서 NullPointerExceptions을 얻을 수 없기 때문에 이것이 작동하지 않았습니다. 이러한 의존성이 설정되지 않은 이유는 더 이상 SpringSecurityService 유형의 스프링 빈이 없기 때문입니다
그래서 저는 위임을 받았습니다 :
import grails.plugins.springsecurity.SpringSecurityService as PluginSpringSecurityService
class CustomSpringSecurityService {
@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService
Object getCurrentUser() {
// my implementation uses methods from pluginSpringSecurityService
}
}
그런 다음 resources.groovy에서 두 개의 빈을 정의했습니다.
springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)
이 두 번째 시도에서, 다시 'springSecurityService'라는 bean이 CustomSpringSecurityService를 참조하도록하고 싶습니다. 그러나 getCurrentUser를 구현할 때 그 bean의 다른 메소드를 사용하기 때문에 grails.plugins.springsecurity.SpringSecurityService 유형의 bean도 필요합니다.
그러나 pluginSpringSecurityService의 종속성이 설정되어 있지 않음을 다시 확인했습니다. 의존성 삽입의 영향을받는 컨텍스트에서 플러그인이 제공하는 bean의 메소드를 재정의하는 더 쉬운 방법이 있습니까?
해결법
-
==============================
1.resources.groovy에서 서브 클래스를 만들고 빈을 다시 정의하지만 의존성을 만족시킨다. 그것들은 이름으로 자동 삽입되지만 모두 나열되어 있으므로 명시 적으로 재정의에 추가하십시오 :
resources.groovy에서 서브 클래스를 만들고 빈을 다시 정의하지만 의존성을 만족시킨다. 그것들은 이름으로 자동 삽입되지만 모두 나열되어 있으므로 명시 적으로 재정의에 추가하십시오 :
springSecurityService(CustomSpringSecurityService) { authenticationTrustResolver = ref('authenticationTrustResolver') grailsApplication = ref('grailsApplication') passwordEncoder = ref('passwordEncoder') objectDefinitionSource = ref('objectDefinitionSource') userDetailsService = ref('userDetailsService') userCache = ref('userCache') }
from https://stackoverflow.com/questions/7132679/override-method-of-grails-plugin-bean by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 메타 주석 및 테스트 클래스에서 @ActiveProfiles가 작동하지 않음 (0) | 2019.04.12 |
---|---|
[SPRING] 스프링 MVC 폼 유효성 검사가 작동하지 않습니다. (0) | 2019.04.12 |
[SPRING] Maven + Spring + Hibernate : hibernate3-maven-plugin hbm2ddl은 "원인 : java.lang.NullPointerException"이유로 실패합니다. (0) | 2019.04.12 |
[SPRING] Spring MVC 애플리케이션 - 세션 범위의 빈 값을 어떻게 설정 하는가? (0) | 2019.04.12 |
[SPRING] 글로벌 컨텍스트 컨텍스트가있는 Spring MVC 주석 : component-scan? (0) | 2019.04.12 |