Java 如何禁用浏览器基本身份验证弹出窗口-Angular 5+;春季安全
我对浏览器弹出的基本身份验证有问题。尽管在Angular中有登录表单,但在输入凭证并单击登录按钮后,浏览器会创建基本身份验证弹出窗口。当我在浏览器弹出窗口中登录时,所有功能都正常工作。在每个请求中都有以下标题: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
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");