如何在未授权用户 (401) 尝试访问 Spring Boot 中的 Web 应用程序时登录

How to log an unauthorized user (401) when they try to access a webapp in Spring Boot

我觉得使用记录器之类的东西应该很容易解决这个问题,但我没有太多使用经验。当我从我的 webapp 的其余部分 api 收到 401 错误时,我只是想记录未经授权的用户。这是当前的休息控制器:

@RestController
public class bagelController {

@Autowired
private bagelService bagelService;

@Autowired
private UserService userService;

@GetMapping("/rest/bagel/search")
public ResponseEntity<Bagel> searchBagel (@RequestParam(value = "bagel", required = false) String bagel, 
        @RequestParam(value = "bagelInd", required = false, defaultValue = "1") int bagelInd) {

    ResponseEntity<Bagel> response;
    Bagel bagel = null;
    if(!userService.getCurrentUser().isBagelEditAccess()) {
        response = ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
        //I'd want to log the unauthorized user right here I believe
    }
    else {
        bagel = bagelService.getbagel(bagel, bagelInd);
        if (bagel == null) {
            response = ResponseEntity.notFound().build();
        }
        else {
            response = ResponseEntity.ok(cnl);
        }
    } 
    return response; 
}

声明记录器并使用log.info()......

打印

导入这个:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

代码:

@RestController
public class bagelController {

    private final Logger log = LogManager.getLogger();

    @Autowired
    private bagelService bagelService;

    @Autowired
    private UserService userService;

    @GetMapping("/rest/bagel/search")
    public Bagel searchBagel (@RequestParam(value = "bagel", required = false) String bagel,
                              @RequestParam(value = "bagelInd", required = false, defaultValue = "1") int bagelInd) {

        Bagel bagel = null;
        if(!userService.getCurrentUser().isBagelEditAccess()) {
            response = ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
            //I'd want to log the unauthorized user right here I believe
            log.info("Unauthorized User: "+userService.getCurrentUser());
        }
        else {
            bagel = bagelService.getbagel(bagel, bagelInd);
            if (bagel == null) {
                response = ResponseEntity.notFound().build();
            }
            else {
                response = ResponseEntity.ok(cnl);
            }
        }
        return response;
    }