如何在Spring Boot中处理@Secured的异常

4

我在我的Spring Boot应用程序中使用@secured进行安全保护。当我尝试使用不同的角色访问它时,它会给我异常。我可以理解这一点,但是我该如何向前端提供适当的响应而不是内部服务器错误?这是我的控制器:

@Secured("ROLE_ADMIN")
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public Map<String, Object> saveUser(@RequestBody User user) {
        log.debug("in admin save user controller");
        userService.saveUser(user);
        return ResponseHandler.generateResponse(
                configProp.getProperty("moderator.created"), HttpStatus.OK,
                true, null);
    } 

我遇到了一个异常,请帮忙,我是it新手。

org.springframework.security.access.AccessDeniedException: Access is denied
2个回答

0
你应该将 @Secured 注解放置在服务方法级别,并在控制器内捕获它以返回适当的响应。
类似这样:

UserService.java

@Secured("ROLE_ADMIN")
public void saveUser(User user) {
   userRepository.save(user);
}

UserController.java

@RequestMapping(value = "/user", method = RequestMethod.POST)
public Map<String, Object> saveUser(@RequestBody User user) {
    log.debug("in admin save user controller");

    try {
       userService.saveUser(user);
       return ResponseHandler.generateResponse(
            configProp.getProperty("moderator.created"), HttpStatus.OK,
            true, null);
    } catch(AccessDeniedException e) {
       log.warn("Unauthorized", e);
       return new ResponseEntity<Object>(configProp.getProperty("error.forbidden"), 
            HttpStatus.SC_UNAUTHORIZED);
    }
} 

-1

从异常信息可以清晰地看出,访问的用户没有被授权访问API所需的适当角色,访问该API的用户角色应为ROLE_ADMIN。


请检查他的问题? 他问:“但是我如何给我的前端一个正确的响应,而不是内部服务器错误?” - SourceVisor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接