【问题标题】:Controller inheritance in spring boot applicationSpring Boot 应用程序中的控制器继承
【发布时间】:2019-07-08 15:18:16
【问题描述】:

我有一个带有许多不同 @RestController 的 Spring Boot 应用程序 一开始他们都做了以下事情:

if (user != null) {
            log.debug("Got the following request: " + request.getURI().getPath() + " from: " + user.getName());
        } else {
            log.error("Warning user is not defined");
            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
        }

我怎样才能使父控制器对所有请求都进行这些检查,然后每个子控制器将继续其独特的逻辑?

【问题讨论】:

  • 如果您想确保发出请求的用户经过身份验证,您应该使用Spring Security
  • 感谢我使用 spring security,在这种情况下我只想打印发出请求的用户名
  • 这听起来像是Spring AOP 的工作。创建一个处理程序并将@Before 方法指向您的控制器包。
  • 或者像过滤器或者拦截器。但是基类也应该起作用。也许您可以发布您的一个控制器并解释为什么简单的基类/子类方法不起作用?

标签: spring-boot spring-mvc spring-restcontroller


【解决方案1】:

与 cmets 中提到的其他人一样,有很多方法可以使其正常工作。就个人而言,我更喜欢 Spring AOP 来记录这些东西或拦截器/过滤器。但是,您仍然可以使用继承本身来实现这一点,这不是一个好的解决方案。做一些类似的例子,希望你能从中挑选。

public class A extends Logger {
    //RequestMapping stuff
    public void test(){
        logInfo(user);
    }
}

public class Logger {
    public void logInfo(User user){
        // Your log statements here
    }
}

这不仅使其毫无意义而且无法扩展,因为您必须做很多 find and replace 并且随着应用程序的增长,对控制器或日志语句的微小更改将变得乏味。

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2018-03-25
    • 2013-07-17
    • 1970-01-01
    • 2016-08-29
    • 2019-01-07
    • 2020-03-22
    • 2021-06-27
    相关资源
    最近更新 更多