【springsecurity6】关于重定向次数过多的延伸验证loginProcessingUrl(““)

项目场景:

设置了loginProcessingUrl(“/toLogin”),不走controller的(“/toLogin”)逻辑


问题描述

通过debug发现,在设置了loginProcessingUrl(“/toLogin”)之后,实际登陆认证时不会跳转到(自己写的/toLogin)controller里面,而是进入springsecurity框架里面,从框架里面代码中,完成了验证和跳转(验证不会使用自己定义的login方法),这一动作不执行对应controller里面的代码。认证成功之后,一般会重新进入登陆之前 要进入的页面接口(Referer 来源页面),继续执行
在这里插入图片描述
图中最开始要进入的网址:http://localhost:8080/8,被框架拦截,进入登陆认证页面/toLogin,认证成功之后会放行,也就是继续执行http://localhost:8080/8该接口controller的内容


基础知识:

defaultSuccessUrl和successForwardUrl区别

defaultSuccessUrl 有一个重载的方法,如果我们在 defaultSuccessUrl 中指定登录成功的跳转页面为 /index,此时分两种情况,如果你是直接在浏览器中输入的登录地址,登录成功后,就直接跳转到 /index,如果你是在浏览器中输入了其他地址,例如 http://localhost:8080/8,结果因为没有登录,又重定向到登录页面,此时登录成功后,就不会来到 /index ,而是来到 /8 页面。

defaultSuccessUrl 就是说,它会默认跳转到 Referer 来源页面,如果 Referer 为空,没有来源页,则跳转到默认设置的页面。
successForwardUrl 表示不管你是从哪里来的,登录后一律跳转到 successForwardUrl 指定的地址。
defaultSuccessUrl 另外一个重载方法,第二个参数如果输入为 true,则效果和 successForwardUrl 一致。

successForwardUrl 指定的地址为 /index ,你在浏览器地址栏输入 http://localhost:8080/codedq,如果你还没有登录,将会重定向到登录页面,当你登录成功之后,就会服务端跳转到 /index 页面;或者你直接就在浏览器输入了登录页面地址,登录成功后也是来到 /index。


解决方案:

两种方案

有两种方式:

  • 设置loginProcessingUrl,defaultSuccessUrl,不走controller
  • springsecurityConfig配置类不设置,通过走controller

方法1:

.formLogin(form -> form.loginPage("/toLoginPage")
                //处理前端跳转页面,要跟form表单里的action相同
                        .loginProcessingUrl("/toLogin")
                        .defaultSuccessUrl("/success"true)
                        .passwordParameter("pwd")
                        .usernameParameter("username"))

通过配置.loginProcessingUrl("/toLogin"),进入框架进行认证,认证结束后按照设置进入指定页面"/success"

方法2:

    @RequestMapping ("/toLogin")
    public String toLogin(@RequestParam String username,
                          @RequestParam String pwd){
        //调用自定义的login认证逻辑
        String login = userService.login(username, pwd);
        return "success";
    }
<form th:action="@{/toLogin}" method="post">
    <div>
        <label> User Name : <input type="text" name="username"/> </label>
        <label> pwd: <input type="password" name="pwd"/></label>
    </div>

<!--    是否选择了记住我按钮-->
    <div><input type="checkbox" value="remember"/></div>
    <div><input type="submit" value="Sign In"/></div>
</form>

配置类中不要设置loginProcessingUrl("/toLogin"),就会走到@RequestMapping ("/toLogin")controller中执行自己的逻辑

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值