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

在Spring Boot中从Angular 7但Postman工作正常的请求中接收空授权头

易雅畅
2023-03-14

当我向用Spring Boot设计的后端控制器发送请求时,我收到了一个null授权头。但是当我用Postman发送相同的请求时,正确的API会被命中,数据会从后端正确地获取。

在Spring Boot端,下面是JWTSecurityConfiguration.java的代码:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers(HttpMethod.OPTIONS, "**/**").permitAll()
        .antMatchers("/auth/**").permitAll()
        .anyRequest().authenticated()
        .and()
        .exceptionHandling().authenticationEntryPoint(entryPoint)
        .and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        http.addFilterBefore(authenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
        http.headers().cacheControl();
    }

我在JWTauthEnticationToken.java中收到NULL授权标头:

    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
            throws AuthenticationException, IOException, ServletException {
        String header = request.getHeader("Authorization");
        if (header == null || !header.startsWith("Bearer ")) {
            System.err.println("Header: " + header);
            LOGGER.error("JWT Token is either missing from HTTP header or has been provided in an incorrect format!");
            throw new AuthenticationCredentialsNotFoundException(
                    "JWT Token is either missing from HTTP header or has been provided in an incorrect format!");
        }
        String authenticationToken = header.substring(7);
        JwtAuthenticationToken jwtAuthenticationToken = new JwtAuthenticationToken(authenticationToken);
        LOGGER.error("JWT Token has been received successfully. Authentication is in progress...");
        return getAuthenticationManager().authenticate(jwtAuthenticationToken);
    }
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    let jwtAuthHeader = this._authSvc.getAuthorizedToken();
    let jwtAuthUsername = this._authSvc.getLoggedInUsername();

    if (jwtAuthHeader && jwtAuthUsername) {
      request = request.clone({
        setHeaders: {
          Authorization: jwtAuthHeader
        }
      });
    }
    console.log(request);
    return next.handle(request);
  }

我不知道为什么实际发送的请求与HTTP拦截器更新的请求不同。我如何解决这个问题?

共有1个答案

谷泳
2023-03-14

我如何避免飞行前请求检查?

您不能禁用或避免CORS来源的飞行前请求机制。

跨源资源共享(CORS)是一种机制,它使用额外的HTTP头告诉浏览器让运行在一个源的web应用程序从不同的源访问选定的资源。web应用程序在请求源(域、协议或端口)与其源不同的资源时执行跨源HTTP请求

@Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
        configuration.setAllowedHeaders(Arrays.asList("authorization", "content-type", "x-auth-token"));
        configuration.setExposedHeaders(Arrays.asList("x-auth-token"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
@CrossOrigin(origins = "*",allowCredentials = ,allowedHeaders = , exposedHeaders = , methods = , value = )
 类似资料:
  • 当我试图通过邮递员发送时,我有一个请求正在正常工作。我试图实现相同的使用代码,我面临一个错误。 我正在使用的代码- 我得到的错误是- org.springframework.web.client.HttpClientErr异常$未授权: 401未授权 但《邮递员》中同样的作品也有同样的细节。 我想说明一下 后端API不在我手里。 clientid,clientSecret,access_token

  • 我正在尝试调用Workday招聘网络服务的Put_Background_Check操作。我已经在SoapUI中打开了WSDL文件,并成功地发送了以下XML。。。 我得到以下回应。。。 问题是,当我试图在Postman(或cURL或Python请求)中用相同的标题重新创建相同的POST请求时,我会得到无效的用户名或密码错误。SoapUI在这里做什么特别的事情吗?本案的回应如下...

  • 以下是Chrome使用的头(从DevTools获得): 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 接受编码:gzip、deflate、sdch 接受语言:en-us,en;q=0.8 授权:协商TLRMTVNTUAADAAAAAAAAAYAIOAAABKAWQBOGAAAAAWADABYA

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 在Apache J Meter中用1个线程触发请求时,我得到以下错误-org.Apache.http.nohttpresponseException:xxx.tc.at.xxx.net:8443未能在org.Apache.http.impl.conn.defaultthtpresponseparser.parsehead(Defaultthtpresponseparser.java:141)在or

  • 我有一个对soap Web服务的请求,该服务在SoapUi中运行良好。我想在python脚本中调用此Web服务。 我尝试了一些模块:zeep,泡沫,...但是我总是有一个SSL错误。 以下是信息: https://37.71XXXXXXACONYX?wsdl 基本认证:用户名密码 身份验证类型:抢占式 我在SoapUi中提供了xml。 有人有什么想法吗? 谢谢!! 我试过: