标签: interceptor

使用Spring MVC和自我实现的拦截器强制下载文件会产生一个奇怪的问题

我的所有控制器都扩展了以下抽象类:

public abstract class AbstractController {

    public HttpServletRequest request;
    public HttpServletResponse response;
    public ModelMap model;

}
Run Code Online (Sandbox Code Playgroud)

而且,我实现了以下拦截器:

public class HttpRequestInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
        if (handler instanceof AbstractController) {
            AbstractController controller = (AbstractController) handler;
            controller.request = request;
            controller.response = response;
            controller.model = new ModelMap();
        }
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        if (handler instanceof AbstractController && modelAndView != null) {
            AbstractController controller …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc httpresponse interceptor force-download

0
推荐指数
1
解决办法
4644
查看次数

CDI 拦截器未启动

我的拦截器没有在应该启动的时候启动,即使它已在 bean 中注册并且文件没有提供任何警告。我缺少什么?

编辑1:我希望能够在每次Genres.java调用和离开函数时进行记录,但使用此配置我根本没有得到任何输出。

编辑 2:按照 Svetlin 的建议应用断点后,我可以确认代码永远不会到达拦截器或生产者。

beans.xml

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.1" bean-discovery-mode="all">
    <interceptors>
        <class>no.krystah.log.LoggingInterceptor</class>
    </interceptors>
</beans>
Run Code Online (Sandbox Code Playgroud)


日志拦截器.java

package no.krystah.log;

import javax.inject.Inject;
import javax.interceptor.AroundConstruct;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

import org.slf4j.Logger;

@Log @Interceptor
public class LoggingInterceptor {

    @Inject
    Logger logger;

    @AroundConstruct
    private void init(InvocationContext ic) throws Exception {
        logger.info("Entering constructor");
        try {
            ic.proceed();
        } finally {
            logger.info("Exiting constructor");
        }
    }
    @AroundInvoke
    public Object logMethod(InvocationContext ic) throws Exception {
        logger.info(ic.getTarget().toString()+" - "+ ic.getMethod().getName()); …
Run Code Online (Sandbox Code Playgroud)

java interceptor cdi java-ee-7

0
推荐指数
1
解决办法
1891
查看次数

使用拦截器设置响应头?

我正在编写 jax-rs 端点。对于某些端点集(现有代码),我想设置一个额外的响应标头,它实际上是在 @AroundInvoke 拦截器中生成的,并设置为 HttpServletRequest 属性。在@AroundInvoke 中,我可以使用@Inject 访问HttpServletRequest。但似乎我无法在同一个拦截器本身中访问 HttpServletResponse 。

似乎我可以使用 PostProcessorInterceptor 但我再次对以下文档感到困惑。

org.jboss.resteasy.spi.interception.PostProcessInterceptor 在 JAX-RS 方法被调用之后但在 MessageBodyWriters 被调用之前运行。它们只能在服务器端使用。如果您需要在可能没有调用任何 MessageBodyWriter 时设置响应标头请使用它们。

我正在使用resteasy,杰克逊。如果我使用 PostProcessorInterceptor 可以注入 HttpServletResponse 吗?或者我可以在那里设置新的 http 标头吗?

任何代码示例/方向将不胜感激。

java jax-rs interceptor resteasy jakarta-ee

0
推荐指数
1
解决办法
2000
查看次数

添加安全头以响应 spring MVC 应用程序

我想在 Spring MVC 的响应头中添加以下头:

X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Run Code Online (Sandbox Code Playgroud)

我在 MvcConfig 文件中编写了以下代码,该文件扩展了WebMvcConfigurerAdapter

 @Bean 
    public Filter securityHeadersFilter() { 
        return new OncePerRequestFilter(){ 
            @Override 
            protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
                filterChain.doFilter(request, response); 

                response.setHeader("X-XSS-Protection", "1; mode=block"); 
                response.setHeader("X-Content-Type-Options", "nosniff"); 
            } 
        };
     }
Run Code Online (Sandbox Code Playgroud)

现在,当我点击请求并在浏览器上看到响应标头时,这两个标头不会出现。我没有用 urlPattern 注册过滤器。这是问题还是我错过了其他事情?如果 urlpattern 配置是问题,那么请告诉我如何以及在哪里配置它。

无论如何,我的最终目标是在 Response 标头中超过两个安全标头。

spring-mvc interceptor servlet-filters response-headers

0
推荐指数
1
解决办法
4942
查看次数

刷新令牌OAuth身份验证Angular 4+

我正在使用HttpAngular HttpClient的解决方案,但是我决定进行迁移并使用新的解决方案,并且我试图创建一种解决方案Interceptors来管理需要刷新令牌以及需要将标头修改为放置授权令牌。

http interceptor angular-http-interceptors angular

0
推荐指数
1
解决办法
8732
查看次数

如何针对特定请求(例如 POST、Get 和 PUT)使用多个拦截器?

我在项目中使用了spring boot和cloud。对于日志记录,我使用拦截器。由于我是拦截器的新手,因此我在使用多个拦截器时遇到困难。就像我可以使用特定的拦截器来执行特定任务吗?例如,当我请求帖子时,会调用 POST 拦截器,当我使用 GET 时,会调用 get 拦截器。我怎样才能为多个拦截器编写代码?

我还没有尝试过任何事情,因为我不明白逻辑

spring spring-mvc request interceptor spring-boot

0
推荐指数
1
解决办法
6279
查看次数

SpringBoot:拦截器的 preHandle 在流端点上运行两次

我想使用拦截器来管理当前与服务器的活动连接数。除了常见的 JSON 端点之外,我的 API 还提供流字节的端点。我实现了一个会话管理器,用于跟踪会话计数、一个限制拦截器和几个 API 端点。下面是一些示例代码。

常见的 JSON 端点与拦截器运行良好。然而,流端点实际上调用了拦截器的preHandle方法两次,但afterCompletion只调用了一次。第二次调用preHandle发生在第一个调用的响应计算完成之后。当我从拦截器中删除会话管理器时,这种行为不再发生。

最小工作示例:

配置:

@Configuration
@RequiredArgsConstructor
public class AppConfig implements WebMvcConfigurer {
    private final Interceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.interceptor).addPathPatterns("/numbers", "/numbers/*");
    }
}
Run Code Online (Sandbox Code Playgroud)

拦截器:

@Component
@RequiredArgsConstructor
@Slf4j
public class Interceptor implements HandlerInterceptor {
    private final SessionManager sessionManager;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        log.info("Pre-handle {}", this.hashCode());
        return this.sessionManager.accept();
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception …
Run Code Online (Sandbox Code Playgroud)

java streaming spring spring-mvc interceptor

0
推荐指数
1
解决办法
1556
查看次数

如何从 Promise 实例的构造时间访问未知的执行器函数?

是否可以检索 Promise 实例的实现细节?让我们假设以下创建的承诺......

let myPromise = new Promise(function (success, error) {
  /* implementation */
}
Run Code Online (Sandbox Code Playgroud)

可以以某种方式访问​​匿名函数吗...

function (success, error) {
  /* implementation */
}
Run Code Online (Sandbox Code Playgroud)

...或者获取代码文件中匿名函数的位置?

javascript function interceptor promise method-modifier

-1
推荐指数
1
解决办法
98
查看次数