spring security loginProcessingUrl无效问题

近几天被一个朋友问道了一个loginProcessingUrl设置后无效的问题。
他的登陆页面的接口是 /loginpage 这个前端页面的登陆按钮请求的url是 /login/doLogin

前端页面代码如下

<form action="/login/doLogin" method="post">

    <input type="text" name="username" />
    <input type="password" name="password"/>
    <button type="submit">登陆</button>

</form>

然后他在后端代码的的controller层写了一个与前端action相同的接口,代码如下

@RequestMapping(value = "/login/doLogin",method = RequestMethod.POST)
    @ResponseBody
    public Object adminlogindologin(String username,String password){
        System.out.println(username);
        System.out.println(password);
        return "成功";
    }

然后他发现这个接口无论如何都不会调用,我仔细观察了他的security的配置有没有问题,发现也没有,此时的security配置代码如下

 @Override
    protected  void configure(HttpSecurity http) throws Exception {
        http
                .formLogin().loginProcessingUrl("/login/doLogin")
                .loginPage("/login")
                .defaultSuccessUrl("/admin/login123")
                .permitAll() // 开启表单登录并配置登录接口
                .and()
                .authorizeRequests() // 开启 HttpSecurity 配置

                .antMatchers("/admin/login","/login/doLogin")
                .permitAll()
                .antMatchers("/admin/**").hasRole("admin")// admin/**
                .and().csrf().disable(); // 关闭csrf


    }

按照我的想法和他的想法配置了loginProcessingUrl就应该在点击登陆按钮的是去请求我们自己写的/login/doLogin这个接口,但是事实是没有。原因是什么呢,原因是security根本不会去请求我们自己写的/login/doLogin这个接口,
loginProcessingUrl的作用是用来拦截前端页面对/login/doLogin这个的请求的,拦截到了就走它自己的处理流程(例如这个UserDetailsService的loadUserByUsername这个方法,UserDetailsService是security的提供的一个接口,一般我们开发的时候需要去实现这个接口),所有我们自己后端写的/login/doLogin这个接口有写跟没写是一样的。所以我后来直接叫他不去设置loginProcessingUrl这个值了,然后前端登陆页面的form表单的action=""就行
至于后端接口怎么获取当前登陆的用户信息请看下面代码

//UserDetails是security提供的一个接口,一般实体类的用户需要去实现它,
 UserDetails admin =  (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
 //我朋友的实体类叫Admin,于是下面这一句也是可以的
 Admin a = (Admin)admin;

实体类部分代码如下

public class Admin implements UserDetails {
    private Integer admin_id/*管理员ID*/;

    private String admin_name/*管理员登录名*/;

    private String admin_nickname/*管理员昵称*/;

    private String admin_password/*管理员密码*/;
    //省略get/set方法
}
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/wzq1915414095/article/details/121510946

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值