我有一个运行良好的 grails 2.5.0 项目(称为 lss),其中插入了 spring-security-core:2.0-RC4。我创建了该项目的 dev war 文件,在 Tomcat8.0 上的服务器上运行并使用网址 http://localhost:8080/lss/login/auth .一切正常 - 我可以使用 BootStrap 中提供的凭据登录。
然后,我将 localhost 名称切换为服务器名称,并尝试使用 URL http://devServer.prods.ca:8080/lss/login/auth 访问它。 .同样,该项目还活着,我看到登录页面没有问题,但是现在当我输入我的凭据时,它们被使用,用户名和密码字段被重置干净,并且没有任何重定向,我只是留在登录页面上!
查看 stacktrace.log 文件,我看到以下异常:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: grails.plugin.springsecurity.LoginController
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
...
Caused by: java.io.NotSerializableException: grails.plugin.springsecurity.LoginController
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
...
有关如何解决此问题的任何建议,请成功进行可验证的部署?
最佳答案
得到它的工作,应归功于此link .实际上,问题在于在 User 域类中大胆地注入(inject)带有 def 关键字的 springSecurityService - 一个其 Controller 不可序列化的插件。通过在用户域类中进行这些编辑:
def getSss() {
grailsApplication.mainContext.springSecurityService
}
protected 无效编码密码(){
密码 = sss?.passwordEncoder ? sss.encodePassword(密码):密码
}
一切正常,并且能够顺利访问和使用具有服务器名称的应用程序。
关于grails springsecurity 的 LoginController 抛出 NotSerializableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946470/