-1

这是来自我的 spring mvc web 应用程序的登录屏幕。我需要捕获所有可能的错误条件并存储到数据库中。就像错误检测系统一样。

例如,如果用户在未填写表单的情况下单击登录按钮,则任何提供的错误条件都不应保存在错误表中。

如果它没有提供密码,它应该保存未提供的密码。

在此处输入图像描述

@RequestMapping(value = { "/do-login" }, method = RequestMethod.POST)
    public String login(@ModelAttribute(value = "user") User user) {
        process(user);
        return "success";
    }

    public void process(User user) {

        List<User> users = userService.findAll();
        for (User u : users) {
            if (!u.getUserName().equals(user.getUserName())) {
                IssueDetail detail = new IssueDetail();
                detail.setSummary("user name");
                detail.setDescription("wrong user name entered");
                issueDetailService.save(detail);
            } else if (!u.getPassword().equals(user.getPassword())) {
                IssueDetail detail = new IssueDetail();
                detail.setSummary("password");
                detail.setDescription("wrong password entered");
                issueDetailService.save(detail);
            } else if (!u.getUserType().equalsIgnoreCase(user.getUserType())) {
                IssueDetail detail = new IssueDetail();
                detail.setSummary("user type");
                detail.setDescription("wrong user type entered");
                issueDetailService.save(detail);
            }
        }

    }

我尝试了上面的代码....当上面的循环运行时,如果用户没有输入任何字段,则循环将在数据库中保存任何 if 语句 3 次。

有没有其他方法可以做到这一点。

测试用例

Username  password   type
-------------------------
  N           N        N      =NULL
  Y           N        N      = WRONG PASS & TYPE
  Y           Y        N      = WRONG TYPE.
  N           Y        Y      = WRONG USER.
  N           N        Y      = WRONG PASSWORD & TYPE.
4

1 回答 1

1

尝试下面的代码行,在 process 方法中代替你的 for 循环。

                            List<User> users = userService.findAll();
            boolean isUserNameExist = false;
            boolean isPasswordExist = false;
            boolean isUserTypeExist = false;
            for (User u : users) {
                if (u.getUserName().equals(user.getUserName())) {
                    isUserNameExist = true;
                    break;
                } 
            }

            for (User u : users) {
               if (u.getPassword().equals(user.getPassword())) {
                    isPasswordExist =true;
                    break;
               } 
            }
            for (User u : users) {
                if (u.getUserType().equalsIgnoreCase(user.getUserType())) {
                    isUserTypeExist = true;
                    break;
                }
            }
            IssueDetail detail = new IssueDetail();
            if(!isUserNameExist){
                detail.setSummary("user name");
                detail.setDescription("wrong user name entered");
            }
            if(!isPasswordExist){
                detail.setSummary(detail.getSummary()+" password");
                detail.setDescription(detail.getDescription()+" wrong password entered");
            }
            if(!isUserTypeExist){
                detail.setSummary(detail.getSummary() +" user type");
                detail.setDescription(detail.getDescription() +" wrong user type entered");
            }
            issueDetailService.save(detail);
于 2014-09-16T06:27:03.947 回答