[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里面找参数。

   

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.