Java 使用spring安全性和CORS的Ajax登录

Java 使用spring安全性和CORS的Ajax登录,java,ajax,spring-security,cors,Java,Ajax,Spring Security,Cors,为了实现具有spring安全性的api,我遵循了以下步骤。它在本地工作得很好,但是当我在远程服务器上部署它时,由于cors策略(服务器:80尝试访问服务器:8080),登录端点是不可访问的 我添加了cors过滤器来处理它,但似乎登录方法(可能还有受保护的方法,我无法测试它,因为我无法登录)没有使用我的自定义过滤器。 未登录用户可用的端点运行良好 请求已预引导,但服务器未在远程服务器上添加正确的头 首先,这里是在到达公共端点之前预飞行请求的请求和响应 请求: 答复: 以下是到达登录端点之前预飞

为了实现具有spring安全性的api,我遵循了以下步骤。它在本地工作得很好,但是当我在远程服务器上部署它时,由于cors策略(服务器:80尝试访问服务器:8080),登录端点是不可访问的

我添加了cors过滤器来处理它,但似乎登录方法(可能还有受保护的方法,我无法测试它,因为我无法登录)没有使用我的自定义过滤器。 未登录用户可用的端点运行良好

请求已预引导,但服务器未在远程服务器上添加正确的头

首先,这里是在到达公共端点之前预飞行请求的请求和响应

请求:

答复:

以下是到达登录端点之前预飞请求的请求和响应:

请求:

答复:

我们很容易看到,当尝试访问/登录时,服务器没有正确响应

下面是一个用于访问/登录的ajax测试:

Login.prototype.Login=function(){
var self=这个;
返回函数(){
$.ajax({
url:properties.serverUrl+'login',
发送前:函数(xhr){
setRequestHeader('X-request-With','XMLHttpRequest');
},
键入:“POST”,
数据类型:“json”,
contentType:'应用程序/json',
数据:JSON.stringify({
用户名:“用户名”,
密码:“密码”
}),
成功:self.handleToken(),
错误:utils.displayError
});
}
}
以下是WebSecurityConfigureAdapter配置方法:

@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http
.csrf().disable()//基于JWT的身份验证不需要csrf
.例外处理()
.authenticationEntryPoint(此.authenticationEntryPoint)
.及()
.会议管理()
.sessionCreationPolicy(sessionCreationPolicy.STATELESS)
.及()
.授权请求()
.antMatchers(基于表单的登录入口点)。permitAll()//登录终点
.antMatchers(令牌\刷新\入口\点).permitAll()//令牌刷新端点
.及()
.授权请求()
.antMatchers(基于令牌的认证入口点)。authenticated()//受保护的API端点
.及()
.addFilterBefore(新CustomCorsFilter(),UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildAjaxLoginProcessingFilter(),UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildJwtTokenAuthenticationProcessingFilter(),UsernamePasswordAuthenticationFilter.class);
}
这是定制的cors过滤器:

公共类CustomCorsFilter扩展了CorsFilter{
公共客户公司过滤器(){
super(configurationSource());
}
私有静态UrlBasedCorsConfigurationSource configurationSource(){
CorsConfiguration配置=新的CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin(“*”);
config.addAllowedHeader(“*”);
配置设置最大值(36000L);
config.setAllowedMethods(Arrays.asList(“GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“OPTIONS”);
UrlBasedCorsConfigurationSource=新的UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(“/**”,config);
返回源;
}
}
谢谢你的回答

伊曼纽尔

Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Allow-Methods: GET,HEAD,POST
Access-Control-Allow-Origin: http://01.02.03.04
Access-Control-Max-Age: 1800
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 0
Date: Mon, 10 Jul 2017 10:40:32 GMT
Vary: Origin
access-control-allow-credentials: true
access-control-allow-headers: x-requested-with
Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 20
Date: Mon, 10 Jul 2017 11:18:40 GMT