2014年5月29日星期四

cas client 单点登录实现登录成功后跳转到登录前请求的页面

最近重构考务通,有一个新需求,考生点击制定的考试链接,或者输入考试链接报名,这时需登录,登陆后要回到之前请求的考试链接,而不是回到报名系统统一的主界面
查看shiro源码发现系统在启动时会加载loginUrl
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="${loginUrl}" />
。。。。。
loginUrl是配置在properties中的
loginUrl=http://127.0.0.1:8880/uamssocloud/login?service=http://127.0.0.1:8881/kwtong/login

由于在shiro配置文件中有
/** = user

shiro的UserFilter会过滤请求判断是否有Session用户,若没有则重定向到loginUrl,去单点系统登录,而单点登录成功后会重定向回service参数制定的地址

这时LoginController登录成功后,会统一return "redirect:/main"

解决方案
继承UserFilter,重写redirectToLogin方法,将service参数改写,使之变成这样子
http://127.0.0.1:8880/uamssocloud/login?service=http://127.0.0.1:8881/kwtong/login?url=/kcinfo/kclist/081/201304

将shiro配置文件/** = user 改成/** = myUserFilter

再修改LoginController,当存在url参数时,重定向到url制定的地址

大功告成


没有评论:

发表评论