[Demonstration 1]

[Buggy Method]
@Login(action = Action.Skip)
@RequestMapping(value = "/doLogin", method = RequestMethod.POST)
public String doLogin(String userName, String password, String captcha, String return_url, Model model) {
    if (StringUtils.isBlank(userName) || StringUtils.isBlank(captcha) || StringUtils.isBlank(captcha)) {
        model.addAttribute("error", "用户名/密码/验证码不能为空.");
        return "login";
    }
    String sessionCaptcha = new KaptchaExtend().getGeneratedKey(request);
    if (StringUtils.isBlank(sessionCaptcha)) {
        model.addAttribute("error", "验证码已过期,请重新输入.");
        return "login";
    }
    if (!captcha.toLowerCase().equals(sessionCaptcha.toLowerCase())) {
        model.addAttribute("error", "验证码错误.");
        return "login";
    }
    SysUser sysUser = sysUserService.login(userName, password);
    if (sysUser == null) {
        model.addAttribute("error", "用户名或密码错误.");
        return "login";
    }
    /**
     * 登录成功
     */
    Token token = new Token();
    token.setUid(sysUser.getId());
    token.setUname(sysUser.getUserName());
    token.setIp(IpUtil.getIpAddr(request));
    TokenUtil.addToken(token, request);
    /**
     * 记录登录日志
     */
    sysLogService.insertLog("用户登录成功", sysUser, request.getRequestURI(), "******");
    if (StringUtils.isNotBlank(return_url)) {
        return redirectTo(return_url);
    }
    return redirectTo("/index");
}

[Buggy Hunk]
if(StringUtils.isBlank(userName) || StringUtils.isBlank(captcha) ||  StringUtils.isBlank(captcha)){

[Patch]
if(StringUtils.isBlank(userName) || StringUtils.isBlank(password) ||  StringUtils.isBlank(captcha)){

[Demonstration 2]

[Buggy Method]
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) (request);
    HttpServletResponse httpResponse = (HttpServletResponse) (response);
    String resourcePath = new UrlPathHelper().getPathWithinApplication(httpRequest);
    String authorizationHeader = httpRequest.getHeader("Authorization");
    if (!StringUtils.isEmpty(authorizationHeader)) {
        String[] parts = authorizationHeader.split(" ", 2);
        if (parts.length == 2) {
            String tokenType = parts[0];
            if (SecurityConfig.TokenType.equals(tokenType)) {
                String token = parts[1];
                try {
                    tryToAuthenticate(new SecurityToken(token));
                } catch (BadCredentialsException badCredentialsException) {
                    httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                    XmlMapper mapper = new XmlMapper();
                    mapper.writeValue(httpResponse.getOutputStream(), new Error(badCredentialsException));
                    // return to not process next filters
                    return;
                }
            }
        }
    }
    chain.doFilter(request, response);
}

[Buggy Hunk]
XmlMapper mapper = new XmlMapper();

[Patch]
ObjectMapper mapper = new ObjectMapper();

[Demonstration 3]

[Buggy Method]
public AuthumResponse updateUserDeviceToken(int userId, String deviceToken) {
    if (StringUtils.isEmpty(deviceToken)) {
        return ResponseUtil.createFailureResponse(AuthumResponseConstant.STATUS_DEVICE_TOKEN_INVALID, "The device token is invalid.");
    }
    User user = mUserDataProvider.getUser(userId);
    if (user != null) {
        user.setDeviceToken(deviceToken);
        mUserDataProvider.saveUser(user);
        return ResponseUtil.createSuccessResponse("The user device token is updated.");
    }
    return ResponseUtil.createFailureResponse(AuthumResponseConstant.STATUS_USER_INVALID_ID, "The user id is invalid.");
}

[Buggy Hunk]
if(StringUtils.isEmpty(deviceToken)) {

[Patch]
if(StringHelper.isEmpty(deviceToken)) {