Я работаю над фильтром, для которого мне нужен доступ к значению заголовка авторизации. Когда я вызываю мой API с помощью Postman, мой фильтр работает как положено, но когда я вызываю свой API из моего внешнего интерфейса, значение моего запроса на авторизацию всегда равно нулю. Я чувствую, что это может быть связано с CORS ... но я пробовал несколько вещей, чтобы отключить его, и это не похоже на работу. Вот мой код:
Мой фильтр
@Component
public class AuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
String authorizationHeader = httpServletRequest.getHeader("Authorization");
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer")) {
//TODO Throw error
}
String token = authorizationHeader.substring("Bearer".length()).trim();
validateToken(token);
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
@Override
protected boolean shouldNotFilter(HttpServletRequest request){
String path = request.getServletPath();
return !path.contains("/secured");
}
private void validateToken(String token) {
try {
Jwts.parser()
.setSigningKey(TOKEN_SIGNING_KEY)
.parseClaimsJws(token)
.getBody()
.getExpiration();
} catch (SignatureException | ExpiredJwtException e) {
//TODO Throw error
}
}
}
Когда я отлаживаю, возникает исключение, когда я получаю подстроку, потому что моя переменная авторизация равна нулю. Я также попробовал некоторые конфигурации, которые:
MyConfiguration
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH")
.allowedHeaders("Authorization", "Content-Type")
.exposedHeaders("Authorization", "Content-Type");
}
};
}
вызов Javascript с аксиосами:
axios.request({
url: url,
method: 'put',
headers: {'Content-Type': 'application/json', 'Authorization': token},
data:{
email: email,
firstName: userFirstName,
lastName: userLastName,
phoneNumber: this.phoneNumber
}
}).then(response => this.handleSaveChanges(response));
Я распечатал токен перед отправкой, он не нулевой. Я повторяю, когда я вызываю API из Почтальона, мой фильтр работает нормально, и я могу добраться до заголовка авторизации. Поэтому я не уверен, что является причиной проблемы.