Не удается найти пользовательский заголовок в запросе - PullRequest
0 голосов
/ 13 сентября 2018

Я не могу найти заголовок, который я установил в отправляемом запросе ajax get.ЭТО не бывает всегда.Я что-то здесь упускаю?'JWTAuthorizationFilter' вызывается, и это не так;найти заголовок.Только у Access-Control-Request-Headers есть имя.Не уверен, почему это происходит.Кроме того, я вижу ошибку Response for preflight is invalid (redirect) в консоли.

Запрос Ajax:

  $.ajax({
        url : 'http://localhost:8080/assessments/all',
        dataType : 'json',
        contentType : 'application/json',
        headers : {
            'authorization' : localStorage.getItem('authHeader')
        },
        success : function (response) {
            var assessmentTemplate, rating, url;
            var assessmentsContainer = $('.assessments-container');
            //set data
}

SecurityConfig

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/assessments/**").fullyAuthenticated()
                //.antMatchers("/").permitAll()
                .and()
                .addFilter(new JWTAuthorizationFilter(authenticationManager()))
                .formLogin()
                //.loginPage("http://htmlcode.s3-website.us-east-2.amazonaws.com")
                .loginPage("http://localhost:8000")
                .loginProcessingUrl("/login")
                .usernameParameter("username")
                .passwordParameter("password")
                .successHandler(new CustomAuthenticationSuccessHandler())
                //.successForwardUrl("/assessment/all")
                //.loginPage("/login")
                .failureUrl("/login?error")
                .permitAll()
                .and()
                .logout()
                .invalidateHttpSession(true)
                .deleteCookies("JSESSIONID")
                .permitAll();

    }

JWTAuthorizationFilter

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    String header = request.getHeader(HEADER_STRING);

    if (header == null || !header.startsWith(TOKEN_PREFIX)) {
        chain.doFilter(request, response);
        return;

    }

    UsernamePasswordAuthenticationToken authentication = getAuthentication(request);

    SecurityContextHolder.getContext().setAuthentication(authentication);
    chain.doFilter(request, response);
}

Network Image

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Проблема была в том, что я установил заголовки ответа как *. Когда я изменил его на конкретные заголовки, которые я искал, он начал работать. Ниже приведен модифицированный код.

HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, content-type");
response.setHeader("Access-Control-Expose-Headers", "authorization");
0 голосов
/ 14 сентября 2018

Это проблема CORS. Вы можете проверить этот ответ для аналогичной проблемы (хотя для угловой)

  1. Вы можете быстро исправить это, установив значения заголовка «Content-Type», которые не вызовут запрос «preflight». Эти типы:

    • применение / х-WWW-форм-urlencoded
    • многочастному / форм-данных
    • текст / обычный
  2. Другим решением может быть отключение защиты CORS в весенней безопасности (хотя вы должны делать это только для среды разработки). Это должно быть включено на производстве.

  3. Вы также можете запустить Chrome с отключенной защитой CORS, запустив его со следующими параметрами:

    --disable-web-security --user-data-dir="[some directory here]"
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...