Невозможно связаться с заголовком авторизации из OncePerRequestFilter - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над фильтром, для которого мне нужен доступ к значению заголовка авторизации. Когда я вызываю мой 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 из Почтальона, мой фильтр работает нормально, и я могу добраться до заголовка авторизации. Поэтому я не уверен, что является причиной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...