2016-10-19 45 views
0

我剛剛將我的應用從Grails 3.2.0升級到3.2.1由於一些問題以及用戶身份驗證開始失敗。我正在使用Grails Spring Security Core插件版本3.1.1升級到3.2.1後,用戶身份驗證失敗

,我發現了以下異常:

org.springframework.security.authentication.InternalAuthenticationServiceException: 
    Cannot cast object 'User(email:[email protected])' with class 'com.test.User' to class 'com.test.User' 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:126) 
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174) 
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) 
    at grails.plugin.springsecurity.web.authentication.GrailsUsernamePasswordAuthenticationFilter.attemptAuthentication(GrailsUsernamePasswordAuthenticationFilter.groovy:53) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) 

Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
    Cannot cast object 'User(email:[email protected])' with class 'com.test.User' to class 'com.test.User' 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:405) 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319) 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603) 
    at com.test.User.findWhere(User.groovy) 
    at com.test.User$findWhere.call(Unknown Source) 
    at grails.plugin.springsecurity.userdetails.GormUserDetailsService.$tt__loadUserByUsername(GormUserDetailsService.groovy:60) 
    at grails.plugin.springsecurity.userdetails.GormUserDetailsService$_loadUserByUsername_closure1.doCall(GormUserDetailsService.groovy) 

,當我們在Apache Tomcat上部署這只是失敗(使用8.5.6),但它工作正常發展與grails run-app

下面是改性的依賴關係在build.gradle(其餘的配置是相同的通過創建應用內所產生):

// "compile" changed to "provided" 
provided "org.springframework.boot:spring-boot-starter-tomcat" 
compile "org.grails.plugins:spring-security-core:3.1.1" 
compile "org.grails.plugins:asynchronous-mail:2.0.0.RC4" 
compile "org.mongodb:bson:3.3.0" 
compile "org.codehaus.groovy.modules.http-builder:http-builder:0.7.1" 
runtime "mysql:mysql-connector-java:5.1.39" 
// https://github.com/spring-projects/spring-boot/issues/6761 
runtime "com.google.code.gson:gson:2.5" 
// Commented this to avoid issue (https://github.com/grails/grails-core/issues/10196) 
//provided "org.codehaus.groovy:groovy-ant" 

的相同的設置是在Grails的3.2.0工作。

有關此異常的任何想法?

+1

可能與https://github.com/grails/grails-core/issues/10244 –

+0

是看上去像覆蓋limitScanningToApplication。 –

+0

任何解決方法@GraemeRocher至3.2.2發佈? –

回答

1

似乎是Grails 3.2.1本身的一個問題。問題跟蹤grails/grails-core#10244

解決方法是在你的grails-app/init/PACKAGE/Application.groovy

import grails.boot.GrailsApp 
import grails.boot.config.GrailsAutoConfiguration 

class Application extends GrailsAutoConfiguration { 
    static void main(String[] args) { 
     GrailsApp.run(Application, args) 
    } 

    @Override 
    boolean limitScanningToApplication() { 
     return false 
    } 
}