Весной mvc, когда я нажимаю CURL, получаю ошибку весной MVC - PullRequest
0 голосов
/ 04 октября 2018

У меня есть URL-адрес типа curl,

curl -i -X GET -H Accept:application/json http://localhost:8080/onyxcxm/admin/getDTMF/2

, когда я нажимаю на URL и получаю Response, как,

HTTP / 1.1 302

X-Content-Type-Options: nosniff

X-XSS-Protection: 1;mode = block

Cache-Control: no-cache, no-store, max-age = 0,

must-revalidate Pragma: no-cache

Срок действия: 0Опции X-Frame: SAMEORIGIN

Местоположение: http://localhost:8080/onyxcxm/login

Длина содержимого: 0

Дата: чт, 04 октября 2018 11:36:48 GMT

и вот мой контроллер вроде

@RequestMapping(value="/getDTMF/{dtmf}",headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<String> getDTMF(@PathVariable("dtmf") String dtmf) {
    System.err.println("Pressed digit is "+dtmf);
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");
    return new ResponseEntity<String>(null, headers, HttpStatus.OK);
}

и моя конфигурация безопасности:

protected void configure(HttpSecurity http) throws Exception {
    http
    .headers().addHeaderWriter(
            new XFrameOptionsHeaderWriter(
            XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
            .and()
    .authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ADMIN')")
    .antMatchers("/user/**").access("hasRole('USER')")
    .and()
    .formLogin()
    .loginPage("/login")
    .loginProcessingUrl("/j_spring_security_check")
    .successHandler(authenticationSuccessHandler())
    .failureUrl("/login?error")
    .usernameParameter("username")
    .passwordParameter("password")
    .and()
    .logout()
    .logoutUrl("/j_spring_security_logout")
    .logoutSuccessHandler(logoutSuccessHandler())
    .logoutSuccessUrl("/login?logout")
    .invalidateHttpSession(true)
    .and()
    .csrf().disable();
}

я не думаю, почему я получаю эту ошибкуКто-нибудь может решить это?Спасибо.

1 Ответ

0 голосов
/ 04 октября 2018

Поведение, которое вы испытываете, является вашим собственным замыслом.Вы запрашиваете страницу по пути '/ admin / **', которая требует аутентификации в соответствии с настройкой безопасности, которую вы настроили.

Итак, вот что делает Spring:

  • Проверьте, есть ли у вас действующий токен аутентификации
  • Если имеется, разрешите передачу вызова на @Controller и @ RequestMapping
  • Если не перенаправить на настроенную страницу входа (в вашем случае "/ login")

Поскольку вы не предоставляете токен безопасности (который может быть получен при входе в систему на странице / login и должен быть передан в заголовках) Spring перенаправляет запрос CURL на настроенную страницу входа.Код состояния 302 означает только это, перенаправьте пользователя на указанную страницу.

Для базовой аутентификации добавьте заголовок «Авторизация: userHash», где вы заменяете userHash строкой в ​​кодировке base64 :.См. Wikipedia Базовая аутентификация доступа для получения дополнительной информации о том, как использовать заголовок.

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