问题描述
这个问题郁闷了我好几天了。。。。。。问题叙述有点乱,不好意思。。。。。。系统安全部分用的是Springscurity3.0+CAS3.3,CAS同时管理着若干个应用,我在applicationContext.xml中配置了CAS的entrypoint,并通过CasProcessingFilter将CAS插入到了默认的过滤器链中,以上都没问题。问题是:当我通过CAS成功登录了A应用后,再第一次访问B或者C应用时,都会被CasProcessingFilter重定向到其所指定的defaulttargeturl。也就是说,假如有A、B、C三个应用,每个应用都有其各自的index.html,而且均在其配置文件中被定义为了defaulttargeturl。那么即使我首先在A应用中通过CAS登录成功,当我第一次访问B或者C应用时,都会被重定向至B或C的index.html,无视其是否已取得了正确的Token。而再次访问之前访问过的应用时,就不会出现此种情况了。问题的本质我认为是因为,每次第一次登录自他应用时,即便已经通过了CAS登录,取得了正确的Token,但相对于目标应用的Springscurity,都是第一次登录,所以都会通过CasProcessingFilter这个过滤器。而CasProcessingFilter的defaulttargeturl在官方文档中的叙述为“indicatestheURLthatshouldbeusedforredirectioniftheHttpSessionattributenamedACEGI_SAVED_REQUEST_KEYdoesnotindicatethetargetURLonceauthenticationiscompletedsuccessfully.eg:/.ThedefaultTargetUrlwillbetreatedasrelativetotheweb-app'scontextpath,andshouldincludetheleading/.Alternatively,inclusionofaschemename(eghttp://orhttps://)astheprefixwilldenoteafully-qualifiedURLandthisisalsosupported.”。而当重复访问已登录过的应用时,由于应用的securityContext中已存在之前的登录信息,所以就无须再次通过过滤器了。我请问,是否有什么好方法解决此问题。不知道是否能通过配置解决。我现在有一个比较笨的解决方案,就是在登录CAS的一个应用后,同时向其他应用发送一个http请求,如此则模拟了登录的操作。不知道是否有人能提供规范的解决方案,谢谢
解决方案
解决方案二:
自己顶下