我试图让Spring + Security与CAS一起工作,但遇到了一些麻烦。经过一段时间的研究,我发现了一个好例子项目 https://github.com/jgribonvald/demo-spring-security-cas --它非常好,我只需要更改CAS URL就可以了,它开始完美地工作了。
它使用spring 1.2.1.RELEASE,我希望将它升级到最新版本(1.5.2.RELEASE)。为了做到这一点,我不得不做一些修改(修复编译错误,因为有些类在新版本中被删除)。
当编译错误被修复时,我用旧版本测试了它,它仍然有效,但是最新版本失败了。它引发错误,即casServerUrlPrefix在SingleSignOutFilter中为空。
@Bean
public SingleSignOutFilter singleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
singleSignOutFilter.setCasServerUrlPrefix(env.getRequiredProperty(CAS_URL_PREFIX));
// singleSignOutFilter.setIgnoreInitConfiguration(true);
return singleSignOutFilter;
}异常
java.lang.IllegalArgumentException: casServerUrlPrefix cannot be null.
at org.jasig.cas.client.util.CommonUtils.assertNotNull(CommonUtils.java:86)
at org.jasig.cas.client.session.SingleSignOutHandler.init(SingleSignOutHandler.java:140)
at org.jasig.cas.client.session.SingleSignOutFilter.init(SingleSignOutFilter.java:55)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:109)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4572)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)尽管设置了casServerUrlPrefix,而且它适用于较早的版本。因此,我的问题是,在升级spring安全性时,这是否是常见的错误/错误,以及应该如何修复它?
编辑:
我试着做一些更小的升级,它适用于spring 1.2.8.RELEASE,但是1.3.0.RELEASE失败了。我还试图在升级spring引导时将spring安全版本更改得更低,但这并没有帮助。
然后,我创建了自己的SingleSignOutFilter来编写硬代码casServerUrlPrefix,并消除了这个错误,我可以看到,casServerUrlPrefix确实已经设置好了。不幸的是,这并没有解决问题,我仍然不能使用我的web应用程序,但现在它只是不抛出异常日志。
发布于 2017-04-06 14:40:10
所以我终于解决了这个问题。
在SecurityConfiguration类中,必须从SingleSignOutFilter和CasAuthenticationEntryPoint中删除@Bean注释。这似乎是主要问题,很难找到。
另外,必须对application.properties进行更改
app.service.security值从../j_spring_cas_security_check替换为../login/casspring.view.prefix替换为spring.mvc.view.prefixsuffix这就是全部。
发布于 2017-10-06 19:39:46
按照https://github.com/grails-plugins/grails-spring-security-cas/commit/347217482b16be85d775016d10b6b4ccc2f5825f,如果您还将属性ignoreInitConfiguration设置为true,那么它应该会修复问题,或者至少对我是这样做的。
<bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter">
<property name="casServerUrlPrefix" value="${cas.casServerUrlPrefix}"/>
<property name="ignoreInitConfiguration" value="true" />
</bean>发布于 2018-01-09 02:49:19
@Bean
open fun singleSignOutFilter(): SingleSignOutFilter {
val singleSignOutFilter = SingleSignOutFilter()
singleSignOutFilter.setIgnoreInitConfiguration(true)
singleSignOutFilter.setCasServerUrlPrefix(CAS_URL_PREFIX)
return singleSignOutFilter
}https://stackoverflow.com/questions/43118431
复制相似问题