2013-10-29 23 views
14

Tôi đang cố gắng sử dụng oauth an ninh mùa xuân (thư viện không grails plugin, chỉ có một plugin cực kỳ lỗi thời grails).Làm thế nào để đăng ký đậu mùa xuân trong grails mà cần một tham chiếu đến một bộ lọc đậu

Tôi muốn ứng dụng của mình trở thành nhà cung cấp OAuth 1.0a (không phải OAuth 2). Phần OAuth2 của spring-security-oauth dường như không có vấn đề này, bởi vì nó không yêu cầu tham chiếu đến filterchain trong cấu hình nhà cung cấp.

gì tôi muốn là để cấu hình nó như thể hiện ở đây: https://github.com/spring-projects/spring-security-oauth/blob/master/samples/oauth/sparklr/src/main/webapp/WEB-INF/applicationContext.xml

tôi dịch này đến cú pháp groovy của grails:

consumerDetails(InMemoryConsumerDetailsService) 
tokenServices(InMemoryProviderTokenServices) 

xmlns oauth: "http://www.springframework.org/schema/security/oauth" 
oauth.'consumer-details-service'(id:'consumerDetails') { 
    oauth.consumer(name: 'AndroidRegisterApp', key:'testkey', secret:"testkey123", resourceName:'mobileApi', resourceDescription:'Register devices via mobile app') 
} 

oauth.provider(
     'consumer-details-service-ref': "consumerDetails", 
     'token-services-ref':'tokenServices', 
     'request-token-url':'/oauth/request_token', 
     'authenticate-token-url':'/oauth/authorize', 
     'access-granted-url':'/requestTokenAuthorized', 
     'access-token-url':'/oauth/access_token', 
     'filter-chain-ref':'springSecurityFilterChainProxy', 
     'require10a':'true' 
) 

Vấn đề là khi OAuthProviderBeanDefinitionParser phân tích cấu hình này trong quá trình khởi grails ứng dụng , springSecurityFilterChainProxy chưa tồn tại nên nó không thành công ở đây: https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth/src/main/java/org/springframework/security/oauth/config/OAuthProviderBeanDefinitionParser.java#L179 trong khi gọi ConfigUtils.findFilterChọn dòng quan trọng trong đó là:

parserContext.getRegistry().getBeanDefinition(filterChainRef) 

không thành công vì "springSecurityFilterChainProxy" không tồn tại trong trình phân tích cú phápContext (Tôi đoán vì nó chỉ được tạo sau này). Tôi cũng đã cố gắng trì hoãn khởi này, bằng cách đặt nó trong mã bootstrap như thế này:

def initOauthProvider() { 
    def bb = new BeanBuilder(grailsApplication.getMainContext()) 
    bb.beans { 
        // same bean initialization code as above 
      } 
    } 

này cũng không thành công vì ở đây tôi chỉ có đậu trong parserContext là một phần của định nghĩa của tôi (nó không nhìn thấy bất kỳ hạt nho nào khác)

có cách nào để tôi có thể sửa lỗi này không? Tôi đã thấy rằng các BeanBuilder cũng có thể được khởi tạo với một đối tượng RuntimeSpringConfiguration nhưng tôi đã không tìm thấy bất kỳ cách nào để có được điều này từ ứng dụng grails của tôi.

Tôi đang sử dụng:

  • Grails 2.2.4
  • mùa xuân-an ninh-oauth: 1.0.5 với những không bao gồm: 'mùa xuân-an ninh-web', 'mùa xuân-an ninh-core, 'mùa xuân-asm'
  • mùa xuân-an ninh-core: 2.0 RC2 grails cắm
+0

Bạn đã kiểm tra (https://github.com/danveloper/grails-oauth2) repo [này]? –

+0

Tôi đã xem các ví dụ tương tự (bao gồm cả liên kết của bạn) tất cả sử dụng nhà cung cấp oauth2 không phải là những gì tôi cần. Cấu hình OAuth2 trông khác (chỉnh sửa & giải thích trong câu hỏi của tôi) chúng dường như không cần tham chiếu đến bộ lọc bảo mật mùa xuân, chúng chỉ định nghĩa bộ lọc của riêng chúng.Tôi không thể bỏ qua đối số "filter-chain-ref" vì nó chỉ quay trở lại một số mặc định. – NoUsername

+0

Nhưng kho lưu trữ của bạn là bạn có thể có một tệp gọi là resources.xml thay vì khai báo các bean theo cách Groovy, vì vậy bạn có thể sử dụng mẫu xml. –

Trả lời

1

Bạn có thể thử để xác định một cách rõ ràng tất cả các phụ thuộc đậu mùa xuân (tài liệu tham khảo) trong grails-app/conf/mùa xuân/nguồn lực .groovy tệp.

Đây là một cú pháp mẫu:

// resources.groovy 
beans = { 

    yourBean(com.company.YourBean) { 
     springSecurityService = ref('springSecurityService') 
     otherService = ref('otherService') 
     anotherService = ref('anotherService') 
    } 

} 

Vì vậy, trong trường hợp này, bạn sẽ nhận được tất cả ba springSecurityService, otherService và anotherService khởi tạo và truy cập từ bên trong đậu yourBean.

0

thêm tập tin xml hiện tại của bạn trong thư mục tài nguyên và sử dụng dưới đây

beans = { 
    importBeans('classpath:/applicationContext-services.xml') 
} 
Các vấn đề liên quan