单点登录(十二)-----遇到问题-----cas启用mongodb验证方式登录后没反应-pac4j-mongo包中的MongoAuthenticatInvocationTargetException

cas启用mongodb验证方式登录后没反应

控制台输出

2017-02-09 20:27:15,766 INFO [org.jasig.cas.authentication.MongoAuthenticationHandler] - <Connected to MongoDb instance @ [192.168.30.29:27017] using database [testCrm]>

然后我们定位到MongoAuthenticationHandler中打断点,单点登录后发现

pac4j-mongo包中的MongoAuthenticator报错InvocationTargetException。

单点登录(十二)-----遇到问题-----cas启用mongodb验证方式登录后没反应-pac4j-mongo包中的MongoAuthenticatInvocationTargetException

单点登录(十二)-----遇到问题-----cas启用mongodb验证方式登录后没反应-pac4j-mongo包中的MongoAuthenticatInvocationTargetException

原因

导致InvocationTargetException的最常见原因是缺少包。

在某一个项目A中使用了某个jar包x.jar,

而x.jar引入了一个类Y,

应该包含y.jar才可以使用Y类。

但是y.jar没有被包含到工程中,

这时候就会在项目A中跑出InvocationTargetException。

解决方案

我马上检查了发布到tomcat中的cas项目发现确实是没有pac4j-mongo的jar包。

然后找到pac4j-mongo的jar包并把它引用。

发布项目后lib文件夹已经带有pac4j-mongo的jar包了。

再测试就可以通过了。

单点登录(十二)-----遇到问题-----cas启用mongodb验证方式登录后没反应-pac4j-mongo包中的MongoAuthenticatInvocationTargetException

断点调试能走到下一步了。

这也给我们一个启示。在引用一个子项目或者jar包时,它所依赖的jar包也是需要导入进来的。

我们使用maven管理jar包的时候,maven自动会给我们下载了关联的jar包。

使用gradle同样会自动下载关联jar包。

而当我们手动的关联子项目或者jar包时,就需要留意了。

引用一个子项目或者jar包时,它所依赖的jar包也是需要导入进来的。

上一篇:C#operator作用


下一篇:JS替换URL中参数示例