问题描述:项目前后端分离时,因为使用到jwt需要将jwt设置到Authorization中,页面也可以显示Authorization。但是angular无法获取到。
解决办法:
后台服务器解决跨域的地方添加设置:
config.addExposedHeader("Authorization");
后台完整代码:
// cors跨域资源共享过滤器
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = applicationProperties.getCors();
log.info(config.getAllowedOrigins().get(0));
/*
* if (config.getAllowedOrigins() != null &&
* !config.getAllowedOrigins().isEmpty()) {
* log.debug("Registering CORS filter");
* source.registerCorsConfiguration("/api/**", config);
* source.registerCorsConfiguration("/v2/api-docs", config); }
*/
config.addExposedHeader("Authorization");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
前台代码:
return $http({method:'POST',
withCredentials:true, //运行携带cookie
url:'http://*******:8080/login4',
data: data}).success(authenticateSuccess);
function authenticateSuccess (data, status, headers) {
var bearerToken = headers('Authorization');
if (bearerToken!=null&&angular.isDefined(bearerToken) && bearerToken.slice(0, 7) === 'Bearer ') {
var jwt = bearerToken.slice(7, bearerToken.length);
service.storeAuthenticationToken(jwt,data.data.trueName);
return jwt;
}
}