- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个配置了 Jersey 的 Spring Boot v1.4.0 应用程序,用于交付 RESTful 服务。
我有一个可用的应用程序,但我现在正尝试通过 Multi-Tenancy SCHEMA 感知策略来增强它。我希望使用 Spring 的 HandlerInterceptor 框架基于客户端身份验证 header 设置 TenantContext ...
但是,使用 Jersey 发射拦截器似乎存在问题。我可以很好地访问 API(即 curl -i -H "Accept: application/json"-X GET http://localhost:8080/api/products ),但拦截器不会触发。如果我在没有 Jersey 的情况下连接一个更基本的应用程序来进行资源管理,它们会正常运行吗?
这是当前的应用程序设置:
@SpringBootApplication
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).run(args);
}
}
注册拦截器
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
HandlerInterceptor tenantInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tenantInterceptor);
}
}
拦截器本身
@Component
public class TenantInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {
// FIXME: Put in a Logger impl
System.out.println("++++++++++++=======+++++++++ TenantInterceptor.preHandle() Checking for Tenant Routing");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
TenantContext.clear();
// FIXME: Put in a Logger impl
System.out.println("++++++++++++=======+++++++++ TenantInterceptor.postHandle() Reset Tenant to " + TenantContext.getCurrentTenant());
}
}
JerseyConfig
@Component
@ApplicationPath("api")
public class JerseyConfig extends ResourceConfig {
@PostConstruct
private void init() {
registerClasses(TenantsResource.class);
registerClasses(UsersResource.class);
registerClasses(ProductsResource.class);
}
}
我尝试使用 JerseyConfig @ApplicationPath("api") 和 WebMvcConfig registry.addInterceptor(tenantInterceptor).addPathPatterns("patterns");。一个接一个地尝试了以下,但没有喜悦。
registry.addInterceptor(tenantInterceptor).addPathPatterns("/*");
registry.addInterceptor(tenantInterceptor).addPathPatterns("/**");
registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/**");
registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/*");
registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/products");
registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/products/");
任何帮助 - 非常感谢,否则我将求助于用臭代码破解资源 Controller :(。
谢谢 - Derm
最佳答案
正如 M.Deinum 所提到的,HandlerInterceptor
不适用于 Jersey,它也不是一些“underversal”拦截器。它仅适用于 Spring MVC。对于 Jersey,您可以使用 ContainerRequestFilter
.您可以在 ResourceConfig 中注册它。
另请参阅:
关于java - 配置 Jersey 时,Spring Boot HandlerInterceptor 没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235534/
我尝试通过 HandlerInterceptorAdapter 记录所有 http 请求: public class LogRequestInterceptor extends HandlerInte
我正在尝试从 HttpServletRequest 记录请求正文,我添加了一个包装器来执行此操作,但在检索它后我仍然得到一个空请求正文。请问我怎么能多次得到尸体呢? public class Logg
我正在使用 Spring @RestController 并以 Json 格式发送响应。这工作正常,但我需要向记录器发送响应,所以我已经实现了 Spring 的 HandlerInterceptor
每个请求是否有一个新的 Spring HandlerInterceptors 实例? 我在 Spring 中有一个拦截器,它有一个类字段。 public class MyInterceptor ext
在一个库项目中(使用 Spring 3.2.4)我定义了多个拦截器。 servlet 配置 xml 文件包含在要导入 Web 应用程序的 jar 中。拦截器用于多个 servlet xml,因为它们应
我知道我们可以将不同的 url 映射到不同的拦截器,或者我们也可以将多个 url 映射到单个拦截器。我只是想知道我们是否也有排除选项。例如,如果我在应用程序中有 50 个 url 映射,除了 1 个映
我正在尝试将 Spring 项目从 XML 转换为 Java 配置,但在 HandlerInterceptors 方面遇到了以下问题: XML 配置(有效): Java Config(
我有一个 HandlerInterceptor,我在 spring applicationContext.xml 文件中定义了它,如下所示 现在
我知道在 JavaEE 中,过滤器可以拦截对 servlet 的任何请求。但 Spring MVC 中的拦截器并不完全相同。如果你看下图,你会发现拦截器出现在 Dispatcher Servlet 之
总的来说,我对 Spring 和 Web 开发非常陌生,所以如果问题看起来很困惑或不完整,请耐心等待...... 我目前正在开发一个 Spring 项目,其中有一个我称之为“requestContex
在为我的应用程序编写拦截器时,我注意到 HandlerInterceptor 和 WebRequestInterceptor here . 我注意到 HandlerInterceptor 的方法接受
美好的一天。我在里面有一个 spring mvc 应用程序和 2 个 Controller 。第一个 Controller (PublicController)可以处理来自所有用户的请求,第二个(Pr
我在 Spring 3.0.6 中使用 @Configuration 来使用依赖注入(inject)而不使用 .xml 定义文件。 我使用混合方法来定义 Controller ,我将它们放在 Disp
HandlerInterceptor Spring 中的 s 现在可以使用 配置为仅在某些 URL 上调用. Servlet 过滤器可以实现相同的功能(日志记录、安全等)。那么应该使用哪一个呢? 我
我正在为我的 Controller 创建一个日志管理器,用于记录其中的每个操作并返回值 我的 Controller 是这样定义的: @Controller @RequestMapping(value=
我正在实现 HandlerInterceptor需要在处理对多个路径的请求之前/之后执行业务逻辑。我想通过模拟请求句柄生命周期来测试拦截器的执行。 以下是拦截器的注册方式:
我创建了一个简单的 WebMVC 应用程序 - 配置了处理程序拦截器。拦截器的职责很简单 - 它应该检查 HttpRequest 中是否存在有效 session - 如果是,则重定向到注册页面。 我遇
我已经设置了一个 Spring HandlerInterceptor 来向 HttpServletRequest 添加一个属性,以便能够从 Controller 读取它,遗憾的是这似乎不起作用,这对我
让我们看一下这个示例代码: @RequestMapping(value = "/", method = RequestMethod.POST) public ResponseEntity update
我目前正在努力正常关闭服务,为此我们需要在启动关闭之前检查所有当前请求是否已完成。这是我的关机处理程序: @Service public class ShutdownHandler implement
我是一名优秀的程序员,十分优秀!