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

返回HTTP错误401代码&跳过筛选器链

冯野
2023-03-14

使用一个自定义的Spring Security过滤器,如果HTTP头不包含特定的键值对,我想返回一个HTTP401错误代码。

示例:

public void doFilter(ServletRequest req, ServletResponse res,
                     FilterChain chain) throws IOException, ServletException {

   HttpServletRequest request = (HttpServletRequest) req;
   final String val = request.getHeader(FOO_TOKEN)

   if(val == null || !val.equals("FOO")) {
       // token is not valid, return an HTTP 401 error code
       ...
   }
   else {
    // token is good, let it proceed
    chain.doFilter(req, res);
   }

据我所知,我可以做到以下几点:

(2)抛出一个异常,最终导致Spring Security向客户端抛出一个401错误。

如果#1是更好的选项,我如何在对响应调用setstatus(401)之后跳过筛选器链?

或者,如果#2是正确的方法,我应该抛出哪个异常?

共有1个答案

曾明诚
2023-03-14

doFilter方法的API文档中,您可以:

  • 或者使用FilterChain对象(chain.doFilter())调用链中的下一个实体,
  • 或不将请求/响应对传递给筛选器链中的下一个实体以阻止请求处理

因此,设置响应状态代码并立即返回而不调用chain.doFilter是您希望在此实现的最佳选项。

 类似资料:
  • 问题内容: Iam尝试对https URL进行身份验证,但Iam出现异常。下面是代码。 例外情况: 请任何人建议如何解决此问题。 问题答案: 401错误代码表示“未经授权”。我相信您的代码无法正确编码Authentication标头。假设服务器需要 基本访问身份验证, 则代码应如下所示: RFC 2617 中提供了HTTP基本和摘要身份验证方案的全面描述

  • 问题内容: 我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容。我在URL本身中传递了登录凭据。这是代码片段: 我正在程序中创建一个不验证签名/未签名证书的信任管理器。但是,在运行上面的程序时,出现错误服务器返回HTTP响应代码:401表示URL:https:// Administrator:Password @ localhost:8443 / abcd 我可以在浏览器中使用相

  • 问题内容: 我已经实现了IErrorHandler来处理在我的宁静WCF服务的构造函数中引发的授权异常。当捕获到一般异常时,将按预期返回我的自定义类型,但是ContentType标头不正确。 但是,当错误处理程序尝试返回401未经授权的http状态代码时,消息正文将覆盖为默认类型,但ContentType标头应为原样。 显然这里有问题,但我不确定是什么。 如何实现IErrorHandler,使其以

  • 我在Spring boot中编写了一个简单的REST,用rest assured编写的一个测试用例返回http代码400,而它在curl中运行良好。 服务: 测试类: 测试跑步者: 测试输出: 以下行显示返回400: DEBUG 组织 apache.http.impl.conn.DefaultClientConnection - 正在接收响应: HTTP/1.1 400 下面是一个很好的curl请

  • 我正在尝试使用Tweepy API流,但我一直收到错误401。我在网上寻找线索,我找到的每个线程都说这是因为时区设置。那可能不是我的情况。 在我的方案中,我可以与 Twitter API(verify_credentials)进行通信,但是当我创建 Stream 对象并使用筛选器方法触发它时,我不断收到错误 401。这是我的监听器类: 这是我正在测试的代码: 如您所见,api。verify_cre

  • 在我的MySQL数据库中,我有一个表"table1",在列"name"上设置了唯一约束-我想防止重复的名称。 如果表中已经有名字'John',则此代码: 应该抛出insertUnonnequeException()(我自己的异常)。相反,它抛出InsertException()。 查询的执行返回false,执行进入if()循环。另外$db- 我不知道为什么当发生唯一密钥约束冲突时,mysqli不返