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

如何在Spring中拦截和处理401 HTTP错误

齐泰
2023-03-14

我使用的是Spring boot 2.2.9,我在获取401 HTTP错误的入口点时遇到问题,我正在尝试更改响应的行为,就像我们可以使用Spring错误处理程序(ResponseEntityExceptionHandler类)处理其他HTTP错误一样,谢谢

共有1个答案

公羊浩气
2023-03-14

为了回答这个问题:在2021,针对Spring Security版本5。x、 x.如果您没有使用BasicAuthenticationFilter或AbstractAuthenticationFilter,并且在没有提供任何AuthenticationEntryPoint的情况下使用自己的自定义筛选器进行身份验证,并且您像我一样认为未经身份验证的用户将通过ExceptionTranslatorFilter由spring security自动处理,那么您将像我一样感到沮丧。这个答案对我有帮助,但这个链接不起作用,所以这里是当前版本官方文档的更新链接,其中提到了这个明确的authenticationEntryPont,所以我们需要添加到配置中:

 @Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
        http.exceptionHandling()
            .authenticationEntryPoint(new MyAuthenticationEntryPoint());
      }
    
    }

然后我们实现这个类

 public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response,
            AuthenticationException authException) throws IOException, ServletException {
           // 401
        
    }
 类似资料:
  • 问题内容: 我看到 一吨 的条目在我的Tomcat日志(样品粘贴下面)。这些在几个月前进行次要版本升级(Spring Security 4.2.4,IIRC)后开始出现在我的日志文件中,因此,这显然是默认情况下启用的Spring新安全功能。这里报告了类似的问题,但是我的问题专门涉及如何在控制器中拦截这些异常。有一个针对此问题的Spring Security错误记录(提供一种处理RequestRej

  • 我在Tomcat日志中看到大量条目(示例粘贴在下面)。在几个月前的一次小版本升级(Spring Security 4.2.4,IIRC)后,这些功能开始出现在我的日志文件中,因此这显然是Spring中默认启用的一个新的安全特性。这里报告了一个类似的问题,但我的问题具体涉及如何在控制器中拦截这些异常。这个问题有一个Spring Securitybug(提供一种处理RequestRejectedExc

  • 问题内容: 应该很容易: 但是这样就不会调用拦截器。 问题答案: 默认情况下,Spring将注册,和,而无需任何显式配置。 如果您定义自己的bean,那么默认的bean将不会被注册,而您只会得到显式声明的bean。 到目前为止,一切都很好。 当您添加到混合中时,问题就来了。这 也 声明了自己的,它取代了默认值。但是,如果您也声明自己的一个,那么最终您将声明两个。由于按照声明的顺序进行查询,因此通常

  • 我试图在spring security开始处理或到达spring security拦截器之前拦截登录请求。我想这样做是因为我必须对用户的输入进行一些验证。因此,我从HandlerInterceptorAdapter类创建了一个拦截器,但它不起作用。 所以我想做的是: 当任何用户尝试使用用户名和密码登录时,该请求必须首先到达LoginRequestInterceptor。对用户输入进行一些验证,如果

  • 问题内容: 主题行基本上说明了一切。我有一个静态方法要拦截,以便可以将周围的建议应用于该方法。我可以使它与任何非静态方法一起使用,但是我不确定如何允许静态方法被拦截。 问题答案: 使用Spring AOP不能做到这一点,因为它是基于代理的。您必须使用AspectJ。看一个简单的例子:http : //blog.jayway.com/2007/02/16/static-mock-using- asp

  • 如何在请求从DTO转换为JSON字符串之后拦截它们? 反过来,在响应从JSON转换为dto之前拦截它们。