网页多次调用同一方法查询,LambdaQueryWrapper持续追加判断条件,致使登录时只要有一次账密输入错误之后无法正常登录

先贴问题代码

@Controller
@RequestMapping("/Admin")
public class AdminController {
    @Autowired
    private AdminService adminService;
    ModelAndView modelAndView = new ModelAndView();
    LambdaQueryWrapper<Admin> lqw = new LambdaQueryWrapper<>();

    @RequestMapping("/loginUI")
    public String AdminLoginUI() {
        return "adminlogin";
    }

    @RequestMapping("/login")
    public ModelAndView AdminLogin(@Param("username") String username, @Param("password") String password) {
        lqw.eq(Admin::getUsername, username)
                .eq(Admin::getPassword, password)
                .select(Admin::getUsername, Admin::getPassword);
        if (Utils.isNotnull(adminService.getOne(lqw))) {
            modelAndView.setViewName("adminhome");
            modelAndView.addObject("adminInfo", adminService.list());
        } else {
            modelAndView.addObject("msg", "密码输入错误");
            modelAndView.setViewName("redirect:/Admin/loginUI");
        }
        return modelAndView;
    }
}

 以为Wrapper用法和ModelAndView一样,写在类里就ok的,实际并不是,这么写经过多次调用后, LambdaQueryWrapper后的条件会一直追加(虽然不会报错),SQL语句越来越长,只要有一次账密输入错误,之后的判断条件一直为false,导致无法登录,就像下面这样:

 

 username和password会一直追加,正确的写法应该将Wrapper写到方法内部,而不是类的内部,就像这样:

@Controller
@RequestMapping("/Admin")
public class AdminController {
    @Autowired
    private AdminService adminService;
    ModelAndView modelAndView = new ModelAndView();

    @RequestMapping("/loginUI")
    public String AdminLoginUI() {
        return "adminlogin";
    }

    @RequestMapping("/login")
    public ModelAndView AdminLogin(@Param("username") String username, @Param("password") String password) {
        LambdaQueryWrapper<Admin> lqw = new LambdaQueryWrapper<>();
        lqw.eq(Admin::getUsername, username)
                .eq(Admin::getPassword, password)
                .select(Admin::getUsername, Admin::getPassword);
        if (Utils.isNotnull(adminService.getOne(lqw))) {
            modelAndView.setViewName("adminhome");
            modelAndView.addObject("adminInfo", adminService.list());
        } else {
            modelAndView.addObject("msg", "密码输入错误");
            modelAndView.setViewName("redirect:/Admin/loginUI");
        }
        return modelAndView;
    }
}

 

 这样就好啦,再试一遍

问题解决了,但是为什么会这样还是不明白,求大佬指点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值