【问题标题】:Handle Index 0 out of bounds for length 0 for validating user method处理索引 0 超出长度 0 的范围以验证用户方法
【发布时间】:2020-08-24 21:21:59
【问题描述】:

我有这种方法可以验证尝试登录我在 Tomcat 上托管的 Web 应用程序的用户,如果我输入一个不存在的用户名,它会给我一个 Index 0 out of bounds for length 0 而不是返回 null 并显示无效的登录凭据页。如果用户名不存在,如何确保返回 null?

验证用户方法:

 public User validateUser(Login login) {

// SQL statement
String sql = "select * from users where username='" + login.getUsername() + "'";
// Running query
List<User> users = jdbcTemplate.query(sql, new UserMapper());
User user = users.get(0);
// Getting encrypted password
String encodedPassword = user.getPassword();
// Getting login password
String rawPassword = login.getPassword();
// Validating them
boolean isPasswordMatch = passwordEncoder.matches(rawPassword, encodedPassword);
if(isPasswordMatch){
    return user;
}
else { 
    return null;
}
}

控制器:

@RequestMapping(value = "/loginProcess", method = RequestMethod.POST)
public ModelAndView loginProcess(HttpServletRequest request, HttpServletResponse response,
@ModelAttribute("login") Login login) {
ModelAndView mav = null;
// Validating user
User user = userService.validateUser(login);
if (null != user) {
// Setting view
mav = new ModelAndView("loginProcess", "firstname", user.getFirstname());
// Creating session and saving user
HttpSession httpSession = request.getSession(true);
httpSession.setAttribute("User", user);
}
// Returning invalid credentials
return mav = new ModelAndView("loginIncorrect");
}

【问题讨论】:

  • 您可以拥有多个具有相同用户名的用户?我认为它应该是独一无二的,那样你只会得到一张唱片。否则只需检查 users.isEmpty() 是否。如果不是,则获取 users.get(0) 否则为空。类似 -> users.isEmpty 的东西? null : users.get(0);
  • "select * from users where username='" + login.getUsername() + "'";这只是要求 SQL 注入
  • 是的,用户名是唯一的。

标签: java mysql


【解决方案1】:

如果用户长度为零,则可以返回 null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2012-04-07
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多