地址跳转问题
来源:2-8 基于SpringSecurity权限管理Case实操
wcathy
2018-04-26
在做登录这个case里面,访问http://localhost:8080/hello这个链接时,会跳转到http://localhost:8080/login,但是填写完用户名密码后,就直接跳转到http://localhost:8080/,并没有回到最开始访问的链接。请问如何解决?谢谢
1回答
-
Jimin
2018-04-26
你好,这个处理通常我们需要刻意写代码完成的,有时也需要看业务要求是否需要做跳转。这个在后面原生里有留这个口子,框架使用讲解这里只是演示演示框架使用,因此就没有做这个。
接下来说一下这种功能如何实现。既然要跳转,肯定是在什么地方存储了之前登录没权限的请求链接,在登录成功时拿到了之前这个链接并跳转过去,因此核心还是对这个无权限链接的处理。
说一下通常的做法,在跳转到登录页面时后端额外给拼上一个参数,比如跳转时链接调整为login.jsp?ret=xxx,ret后面跟的是请求的无权限连接(包含参数),注意这里的xxx是无权限请求的接口(包含参数)做完url encode 之后的字符串。进入到login页面后,需要对ret处理一下,让提交登录时能带上ret这个参数,下次提交登录时,后台登录成功做跳转时优先检查是否包含ret参数,如果包含ret参数且为一个合理链接,就直接跳转到这个链接,否则跳转到默认链接。
需要做url encode的原因简单解释一下,比如之前请求是a.do?b=1&c=2,直接拼接上去就变成了login.jsp?ret= a.do?b=1&c=2,这个链接看着就不对,当然如果跳转后的连接没参数直接拼上去是可以的。
当然,你也可以选择偷懒,每次把无权限访问的链接写到session里(这个过期可以设置短点),下次登录成功后去session里检查是否有上次无权限访问的链接,如果有就优先跳转过去。当然了,这是种偷懒的做法,通常都选用第一种做法。
祝你学习愉快~00
相似问题