当前位置: 代码迷 >> J2EE >> cas 服务端与Spring shiro 怎么结合? 出现错误
  详细解决方案

cas 服务端与Spring shiro 怎么结合? 出现错误

热度:699   发布时间:2016-04-17 22:58:48.0
cas 服务端与Spring shiro 如何结合? 出现异常
目前已经把jar 与配置文件都放置到项目里了。但是在启动tomcat的时候就报错了。这是异常信息: 
But for our having caught this error, the web application context would not have initialized. 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servicesManager' defined in ServletContext resource [/WEB-INF/cas-configuration/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class org.jasig.cas.services.DefaultServicesManagerImpl]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class org.jasig.cas.services.DefaultServicesManagerImpl 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at org.jasig.cas.web.init.SafeContextLoaderListener.contextInitialized_aroundBody0(SafeContextLoaderListener.java:62) 
at org.jasig.cas.web.init.SafeContextLoaderListener.contextInitialized_aroundBody1$advice(SafeContextLoaderListener.java:44) 
at org.jasig.cas.web.init.SafeContextLoaderListener.contextInitialized(SafeContextLoaderListener.java:1) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class org.jasig.cas.services.DefaultServicesManagerImpl]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class org.jasig.cas.services.DefaultServicesManagerImpl 
at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:217) 
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:111) 
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:477) 
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362) 
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:409) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
... 24 more 
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class org.jasig.cas.services.DefaultServicesManagerImpl 
at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446) 
at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33) 
at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 
at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) 
at org.springframework.cglib.proxy.Enhancer.create(Enhancer.java:285) 
at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205) 
... 31 more 
2014-8-11 11:51:45 org.apache.catalina.core.ApplicationContext log 
严重: SafeContextLoaderListener: 

--------------------------------------------------------------------------------
问题补充:cas 版本3.4.10, shiro 版本1.2.2, Spring 3.2.4 
------解决思路----------------------
cglib 没法代理DefaultServicesManagerImpl 这个类
------解决思路----------------------
引用:
Quote: 引用:

看看是不是没有默认无参的构造方法
DefaultServicesManagerImpl这个类的确是没有默认的构造方法,但是我要是把cas单独部署的话就不会报这个异常,现在是把cas服务端、spring 、shiro 一起放在了一个项目中来部署的 就直接报错了.


你加上试试能不能起来、功能正常么? 如果可以先这样用吧。

我没部过cas也不知道你配置怎么弄的, 我估计你原本是用了jdk的动态代理, 现在整合后又用了cglib导致原来能代理的现在代理不了了。  具体原因还要你一点点查
------解决思路----------------------
哥们,, 你现在在基于修改源码的基础上做事情,,你把这个 org.jasig.cas.services.DefaultServicesManagerImpl 类的 final 去掉,我想就可以了.


cglib 不支持给final 修饰的类 做动态代理
  相关解决方案