1.描述页面有:1)TestSSO/simpleLogin-ajax.jsp ajax登录页面
2)TestSSO/index.jsp页面
3)TestSSO/welcome.jsp页面
注意index.jsp页面有两个连接 一个指向welcome.jsp(只有admin可以进入) 一个指向phpBB
原先设计方式:在CAS自定义了一个FLOW流进行验证
使用在cas流里面判断登录成功就返回一个view,登录失败返回一个view,如果这样写的话有个问题:当登录成功后在index页面获取不到用户名,在index中获取到的用户名为匿名用户。只有再进入一个受限页面如welcome页面回来才能正确获取。
个人猜测原因(还没研究源码):由于在加入CAS和Spring Security整合中这个过程没完整,完整流程是认证信息->授权,由于我只在CAS端填写了认证信息,没有回到客户端把认证信息封装到认证接口,而当第二次进入有限制的url就会去看是否有认证信息,已经有了并且封装起来,因此才可以取得正确的用户名。
2)直接定位到login页面和访问受限页面重定位到login登录成功后跳转的区别:
1)直接定位到login页面登录的时候登陆成功就会跳到defaultTargetUrl
2)受限页面重定位到login登录成功后跳转到受限页面
3)只使用Spring Security XML中defaultTargetUrl位置 和使用CAS时候defaultTargetUrl的位置
只有在CAS中提交用户信息然后再通过CAS处理默认访问页,这个流程才完整,像我之前处理的方式只是在CAS中处理,由CAS抛出处理结果没有再到SpringSecurity中处理,因此
<end-state id="statusSuccessCallbackView" view="bean:dynamicRedirectViewSelector" />在自定义流中是必须的。能完成整个流程,而登录失败可以在CAS端抛出。
总结:定义当访问到受限url的时候收集用户认证信息的入口:b:property name="loginUrl" 如下