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

在成功的OPTIONS调用角与Spring引导后不调用GET请求

薛楷
2023-03-14

我正在尝试使用angular和spring boot实现登录功能

我正在学习Spring教程https://spring.io/guides/tutorials/spring-security-and-angular-js/但在我的例子中,angular项目托管在localhost:4200上,spring托管在localhost:8080上

现在我发送一个/user请求到Spring服务器。我的角代码看起来像:

const headers = new HttpHeaders(credentials ? {
        authorization: 'Basic ' + btoa(credentials.username + ':' + credentials.password)
    } : {});

    this.http.get('http://localhost:8080'+'/user', { headers: headers }).subscribe(response => {
        if (response['name']) {
            this.authenticated = true;
        } else {
            this.authenticated = false;
        }
        return callback && callback();
    });

现在因为CORS,它发送选项请求,状态为200,成功。在此之后,它不会发送实际的GET请求,该请求应该以$http发送选项而不是PUT/POST的形式发送凭据

我的spring代码如下所示:

@CrossOrigin(origins = "*", maxAge = 3600, allowedHeaders={"x-auth-token", "x-requested-with", "x-xsrf-token"})
@RequestMapping("/user")
public Principal user(Principal user) {
    return user;
}

@Configuration
@Order(SecurityProperties.DEFAULT_FILTER_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().and().cors().and().authorizeRequests().antMatchers("/index.html", "/", "/home", "/login").permitAll()
                .anyRequest().authenticated().and().csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}

另外,我在pom文件中添加了Spring Security。

您能帮助找出为什么在OPTIONS请求后不触发GET请求吗?

共有1个答案

郗唯
2023-03-14

根本原因:在Spring Security性中,您只允许三种类型的请求头,即allowedHeaders={“x-auth-token”、“x-requested-with”、“x-xsrf-token”}

但是,在你的http中。获取request您正在使用头名称作为authorization进行基本身份验证,但被Spring Security拒绝。因此,spring将允许的标题响应到您的浏览器(即使用OPTIONS方法的飞行前请求),您的浏览器会看到。。哎呀<代码>授权头是不允许的,因此我无法继续最初的GET调用。

解决方案:在spring security中也允许授权标题。它应该有用的。!!

 类似资料:
  • 问题内容: 我正在一个网站上,我们从XML文件中获取信息。效果很好,但是现在我需要对内容进行滑动。为此,我将使用jCarousel声明它们可以通过调用回调函数来处理动态加载的内容。 但是,当我成功调用函数时,无法进行初始的ajax加载。我究竟做错了什么? 我做错什么了吗?还是我必须去一个完全不同的地方?:-) 问题答案: 使用hulabula代替hulabula()或将函数直接传递给ajax选项:

  • 这是一个经过验证的API,我试图调用...我可以看到,OPTIONs调用返回200 OK和适当的响应头,仍然火狐不发送API调用,完美地工作在Chrome...有什么想法吗 一些值隐藏在下面... 响应报头 HTTP/1.1 200 OK 访问-控制-允许-起源:* 访问-控制-允许-方法:[POST,GET] 访问-控制-允许-报头:授权 日期:周三,02 Oct 2013 20:52:02 G

  • 问题内容: 我想知道为什么$(this)在jQuery ajax调用后不起作用。 我的代码是这样的。 为什么在ajax调用之后,$(this)在这种情况下不起作用?如果我在ajax之前使用它会起作用,但之后没有效果。 问题答案: 在jQuery ajax回调中,“ this”是对ajax请求中使用的选项的引用。它不是对DOM元素的引用。 您需要首先捕获“外部” $(this) :

  • 我有一个springbootmicroservice,它包含一个我需要在每个星期天运行的方法,所以我在方法上使用@Scheduled注释,在配置类中使用@EnableScheduling注释。用@Scheduling注释的方法调用另一个方法,该方法反过来调用一个客户端类,在该类中,通过对另一个微服务进行rest调用获取响应,但rest调用步骤未执行,并且当我从控制器触发该方法时,当我使用计划注释时

  • 为什么没有调用WelcomePage.html的请求处理程序? 如何调用请求处理程序?在Spring Security集成之前,它曾经工作过。spring security Integration之后也不会调用其他请求处理程序。 顺便说一下,spring security如何知道安全配置应该将所有请求转发给我的servlet。应用程序中可能有更多的servlet。form-login的login-