Java 如何禁用浏览器基本身份验证弹出窗口-Angular 5+;春季安全

Java 如何禁用浏览器基本身份验证弹出窗口-Angular 5+;春季安全,java,spring,spring-security,basic-authentication,angular5,Java,Spring,Spring Security,Basic Authentication,Angular5,我对浏览器弹出的基本身份验证有问题。尽管在Angular中有登录表单,但在输入凭证并单击登录按钮后,浏览器会创建基本身份验证弹出窗口。当我在浏览器弹出窗口中登录时,所有功能都正常工作。在每个请求中都有以下标题: private createLoginHeaders(email: string, password: string): Headers { let headers: Headers = new Headers(); headers.append("Authorizati

我对浏览器弹出的基本身份验证有问题。尽管在Angular中有登录表单,但在输入凭证并单击登录按钮后,浏览器会创建基本身份验证弹出窗口。当我在浏览器弹出窗口中登录时,所有功能都正常工作。在每个请求中都有以下标题:

private createLoginHeaders(email: string, password: string): Headers {
    let headers: Headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(email + ":" + password));
    headers.append("Content-Type", "application/x-www-form-urlencoded");
    headers.append("X-Requested-With", "XMLHttpRequest");

    return headers;
 }
并将标题应用于此请求:

login(email: string, password: string): Observable<User> {
    let headers = this.createLoginHeaders(email, password);

    return this.http.post<User>(`api/user/secure/current`, {headers: headers}).do(
      (user: User) => {
        this.saveUserToLocalStorage(user);
      }
    ).catch(err => {
      if (err.status === 401) {
        return Observable.throw('Unauthorized');
      }
    });
 }
以下是我的spring安全配置:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                    .antMatchers("/**/secure/**").authenticated()
                    .anyRequest().permitAll()
                .and()
                    .logout()
                    .logoutUrl("/secure/logout")//I add '/api' to every request by setting this option in spring properties
                    .deleteCookies("JSESSIONID")
                    .invalidateHttpSession(true)
                    .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
                    .permitAll()
                .and()
                    .httpBasic()
                .and()
                    .cors()
                .and()
                    .csrf()
                    .disable();
    }
Angular和SpringWeb应用程序也位于不同的端口上(Angular localhost:4200,Spring localhost:8080)。这就是为什么我在Spring应用程序中使用CORS配置,在Angular应用程序中使用proxy.conf.json


你有什么想法吗?如果需要,我还可以显示一些其他代码片段。谢谢你的帮助

如果您在发送错误凭证时出现登录弹出窗口的问题,可能是因为您的标题

你试过了吗

headers = headers.append("X-Requested-With", "XMLHttpRequest");

append不是直接追加标题,而是返回一个新标题。您好,您解决了吗?我也面临同样的问题。我决定使用JSON Web令牌身份验证,而不是上面的这个。现在它起作用了。
headers = headers.append("X-Requested-With", "XMLHttpRequest");