[Spring Security] 研究了一下Spring Security如何处理 Redirect after Login
为了用户体验,在Login之后应该自动跳到Login之前的页面
Spring Security作为最成熟的WEB安全框架,它是如何处理这个问题的呢?
我研究了一下代码,其机制大概如下:
1.基本步骤
a.某个未登录的用户执行某个操作
b.Spring Security发现它未登录,于是把当前的请求信息(包括URL,参数,POST/GET)存入SESSION
c.然后302到登录页面
d.用户登录
e.Spring Security 发现用户名密码无误,准备执行登录前的请求
f.Spring Security从session中取出上次存入的请求信息,然后发送redirect即可
2.如果上一次请求是POST怎么办? 看代码发现,Spring Security仍然只redirect一个不带参数的URL。但这样的话岂不是导致参数丢失? 不会。因为下一个处理者会从session里面去拿参数。当然下一个处理者不用显式地去访问HttpSession,它仍然只调用 request.getParameter(),只不过这里的request已经被Spring Security封装成为一个特殊的request,这个request覆盖了原始的getParameter()方法。在覆盖的方法中,它会去session里面找参数。