我试图让 Spring Boot + Spring Security 与 CAS 一起工作,但遇到了一些麻烦。经过一段时间的研究,我发现了一个很好的示例项目 https://github.com/jgribonvald/demo-spring-security-cas 非常好,我只需要将 CAS URL 更改为我的,它就可以正常工作了。
它使用spring boot 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 Security 时的一些常见错误/错误,应该如何修复它?
编辑:
我尝试进行较小的升级,它适用于 spring boot 1.2.8.RELEASE
,但失败了1.3.0.RELEASE
. 我还尝试在升级 Spring Boot 时将 Spring Security 版本更改为更低,但这并没有帮助。
然后我创建了自己SingleSignOutFilter
的硬编码casServerUrlPrefix
,我摆脱了那个错误,我可以看到,它casServerUrlPrefix
确实已经设置好了。不幸的是,这并没有解决问题,我仍然无法使用我的网络应用程序,但现在它只是不会在日志中引发异常。