- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写某种框架,允许其他人为其编写 REST Controller 。当然,我希望那些“其他人”尽可能少地与我的代码中发生的事情进行交互。
具体来说,我想要并且需要访问请求数据(即在请求由其余 Controller 处理之前的 RequestEntity
。在 Controller 处理请求之前“拦截”请求,然后才让 Controller 处理它。
考虑以下代码:
@RestController
@RequestMapping("/")
public class MyController {
@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething(RequestEntity requestEntity) {
MyClass.doStuffWithRequestEntity(requestEntity);
// ...
现在我需要的是调用 ExternalClass.doStuffWithRequestEntity(requestEntity);
而无需显式调用它。是否可以在某个类中调用某些方法(将 RequestEntity 传递给它!)而不必显式调用它?
此外,所述拦截器类应该创建并配置一个对象,然后该对象再次可供其余 Controller 使用。
我会想类似的事情
class RestController {
@RestController
@RequestMapping("/")
public class MyController {
@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething() {
MyClass x = MyClass.getInstanceCreatedByInterceptor();
}
}
}
和
class Interceptor {
public void doStuffWithRequestEntity(requestEntity) {
MyClass x = new MyClass();
x.fillObjectWithData();
}
}
之前被执行过。
这个想法是,每个(!)传入请求都会被解析,并且其内容会被解码,而其余 Controller 的程序员根本不必关心这一点。他们应该只通过/从 MyClass 实例访问数据。
有办法做到这一点吗?
最佳答案
Spring-boot 允许我们配置自定义拦截器。通常在 Spring Boot 应用程序中,所有内容都是自动配置的,在这种情况下,我们可以使用 WebMvcConfigurerAdapter
来自定义它。只需扩展 WebMvcConfigurerAdapter
并在此类中提供所需的配置即可。
记得添加@Configuration
注解,以便Spring在组件扫描期间拾取该类。
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
HandlerInterceptor customInjectedInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(...)
...
registry.addInterceptor(customInjectedInterceptor).addPathPatterns("/**");
}
}
这就是您通常向 Spring Boot 应用程序添加拦截器的方式。希望这可以帮助回答您的问题。
从 spring 5.x.x 或 spring-boot 2 开始,WebMvcConfigurerAdapter
被标记为已弃用。WebMvcConfigurer
接口(interface)(由抽象类 WebMvcConfigurerAdapter
),从 Spring 5 开始,包含其所有方法的默认实现。因此,抽象适配器类被标记为已弃用。如果您愿意,可以采用它,如下所示:
@Configuration
public WebConfig implements WebMvcConfigurer {
// ...
}
关于Spring Boot RestController : Intercept incoming requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852142/
我有一个注入(inject)了 Ninject 3.0 的服务类。我已经设置了它,因此它的代理是类代理而不是接口(interface)代理。该服务有 2 个方法,第一个方法返回广泛结果,第二个方法调用
当工具提示即将打开时,我想在状态栏中显示 wpf 应用程序中任何控件的工具提示文本。 当然,我可以尝试递归遍历主窗口的所有子控件,然后 设置他们的 ToolTipOpening事件总是相同的方法。但是
给定一个打开到 Web 服务器的套接字连接的 Flash 应用程序,是否可以读取与 Java 应用程序交换的数据包,而无需重定向所有 Flash 流量(即无需编写套接字代理)? 最佳答案 您想要做的事
我有一个文本框,我想对其进行一些验证。目前我有这段代码: function updateChanger() { // Validate input var likeMessage =
Linux 中的一些命令,例如。 ssh-agent $BASH 确保当前控制台中运行的命令的某些操作被另一个工具“拦截”。这一般是如何运作的?为了理解这一点,我应该研究哪些主题?假设我想制作一个工具
拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理 定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上 过滤器可以做认证
我一直在尝试实现应用程序范围的拦截器,但是,我一直看到以下错误: TypeError: this.interceptor.intercept is not a function 经过多次调试,我意识到
众所周知,我们可以像这样配置拦截器: 我的问题,如何配置
我正在开发一款游戏,里面有寻的导弹。目前,它们只是转向目标,这会产生看起来相当愚蠢的结果,所有导弹都跟随目标周围。 我想创造一种更致命的导弹,它将瞄准目标“将”到达的地方,但我对如何做到这一点感到有点
从 iTunes 中捕获事件有什么好的解决方案吗? 我想构建一个位于 iTunes 内部的插件,并响应特定歌曲的评级变化。对于 Windows,他们有一个我还没有深入研究的 SDK,但我也想为 Mac
现在我有一个名为 chartModelService 的 Angular 服务,上面有这个方法: this.fetchChartModel = function() { return $htt
我的 Controller 有以下方法: @RequestMapping(method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED
如果您安装了 Facebook 应用程序,并使用应用程序 openURL 方法打开 Facebook 页面,您会注意到 Facebook 应用程序接管并处理此 URL,而不是 Safari 执行此操作
我有这样一个类: class A { public static void makeCall() { URL url = "www.google.com"; I
我希望我的应用拦截手机发现的所有标签。这样我想检查标签的 uid 并在之后传递 Intent (显示应用程序选择器等)。 这就是我目前在 list 中的内容,以及用于 TAG_DISCOVERE
我正在用 Playwright's API testing 测试服务器. 我有一个简单的 GET 路由,它总是返回 405 not allowed。它还记录调用了 API 路由。为了这个 StackO
有什么方法可以拦截 Android WebView 中的重定向请求? shouldInterceptRequest(WebView,WebResourceRequest) 似乎没有被调用! 我想通过以
This question already has answers here: Element MyElement is not clickable at point (x, y)… Other el
我有一个拦截器,捕获404错误 拦截(要求:HttpRequest,下一个:HttpHandler):可观察> return next.handle(req).pipe(retry(1),
有没有办法让 Cypress 捕获任何未使用 cy.intercept 处理和 stub 的请求。我希望 Cypress 返回一个有用的错误,以突出显示发出未 stub 请求的实例。目前它只是让这些请
我是一名优秀的程序员,十分优秀!