当前位置: 首页 > 知识库问答 >
问题:

在spring拦截器中设置自定义响应

张浩阔
2023-03-14

这里是我的拦截器方法,我想在这里设置自定义响应,告诉UI发生了什么

@Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
    HttpSession session = request.getSession(false);
    if (session != null) 
         return true;
        else{
        response.sendError(HttpServletResponse.SC_REQUEST_TIMEOUT)
        return false;
        }
    }

并且在web.xml中

<error-page>
    <error-code>408</error-code>
    <location>/error.html</location>
</error-page>

spring-servlet.xml

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**" />
            <mvc:exclude-mapping path="/login" />
            <bean class="com.example.CustomInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

当会话超时时,它在返回false后不发送任何响应。连下面的都不行

response.sendRedirect("http://localhost:8080/home");

共有1个答案

晋骏喆
2023-03-14

你可以尝试非常简单的事情。将mvc:interceptros结构更改为

<mvc:interceptors>
     <bean class="com.example.CustomInterceptor" />
</mvc:interceptors>

这实质上意味着将拦截器应用于所有适用的请求。我一会儿就来解释为什么我说适用一会儿。如果上面的工作,那么问题是与您的映射。

如您所知,拦截器是在handlermapping级别上配置的,在您的情况下,它将是requestmappinghandlermapping(spring 3.1+带有mvc:annotation-drived)或defaultanotationhandlermapping

现在,正如您所使用的 将映射到所有请求(包括子路径),只要它们是有效的映射。假设你有控制器

@RequestMapping(value="/home", method = RequestMethod.GET)
public String welcome() {
    return "welcome";
}

您不能命中http://localhost:8080/yourprojectname/home/test并期望它命中拦截器。因此,您必须点击http://localhost:8080/yourprojectname/home,因为这是一个有效的handlermapping。

如果拦截器受到任何请求的攻击,则首先进行调试。如果它真的起作用

response.sendError(HttpServletResponse.SC_REQUEST_TIMEOUT);

应该将您重定向到error.html

<error-page>
    <error-code>408</error-code>
    <location>/error.html</location>
</error-page>
 类似资料:
  • null 我尝试将@priority(interceptor.priority.platform_beform)和@prematching也放入我的过滤器中,但即使是在OIDC启动后也会调用。 另外,是否有任何方法支持扩展quarkus oidc逻辑以包括自定义代码? 我无法获得oidc和keycloak-auth拦截器的优先级(知道这些可以帮助我决定过滤器的优先级)。请帮忙。

  • 我想添加spring mvc拦截器作为Java配置的一部分。我已经有了一个基于xml的配置,但是我正在尝试使用Java的配置。对于拦截器,我从spring的文档中知道可以这样做- 但我的拦截器使用了一个spring豆,就像下面这样- SomeService类如下所示- 我使用这样的注释来扫描bean,并且没有在配置类中将它们指定为 根据我的理解,由于Java配置使用new来创建对象,所以sprin

  • 我想对spring boot rest-api应用程序做一些端到端测试。使用spring mock MVC实现这个im。但是我无法得到200响应,因为rest api正在使用自定义的安全拦截器来验证请求中的令牌。相反,我一直得到401作为回应。如何在我的测试中包含此令牌验证? 这是我的拦截课

  • 在RestTemplate中,我有一个自定义拦截器,它将记录一些请求-响应详细信息并保存到数据库。 我的自定义拦截器: springboot中的RestTemboard bean配置: 将拦截器添加到restTemboard bean: 如何将此拦截器添加到佯装客户端? 正在应用中。yml: InterceptorOne为假装客户端中的每个请求添加标头: 但是我不能添加日志服务拦截器,因为它由于错

  • 我正在研究spring data rest服务&在自定义拦截器方面面临一些问题。前面我使用了spring-data-rest-webmvc2.2.0&以以下方式添加了拦截器。 对我来说效果很好。但是当我升级到spring-data-rest-webmvc 2.3.0版本时,我注意到handlerMapping隐藏在DelegatingHandlerMapping后面。因此,我尝试以以下方式添加拦截

  • 我有一个Flume组件在监听Syslog流。我做了一个自定义的拦截器来修改调用,但它不起作用。我做错了什么?谢谢你,Andrea 拦截器是一个编译良好的JAR文件,位于@FLUME_HOME/bin目录中 系统将事件记录在文件中而不修改它们,这是相关的DEBUG日志: