В моей конфигурации, я определил, что:Spring Security hasIpAddress вызывает ошибки
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
И со следующим кодом:
http.exceptionHandling()
.authenticationEntryPoint(authEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/api/payment").permitAll()
//.antMatchers("/api/payment").hasIpAddress("XXX.XXX.X.XX")
...
Теперь, когда я разрешенное весь трафик «/ API/платеж ", все выполняется.
Однако, если я пытаюсь включить IP проверки:
http.exceptionHandling()
.authenticationEntryPoint(authEntryPoint)
.and()
.authorizeRequests()
//.antMatchers("/api/payment").permitAll()
.antMatchers("/api/payment").hasIpAddress("XXX.XXX.X.XX")
...
запрашивает передачу с данного IP-адрес получен следующий ответ:
{"errorMessage":"Not Found","errorId":"6ae34aa3-9195-42d6-8906-996906988ce0","errorDetails":null}
Что я делаю неправильно?
EDIT
Это метод, который я вызов:
@RequestMapping(value = "/payment", method = POST)
public String saveOrder(@ModelAttribute PaymentDto paymentDto) {
paymentService.savePayment(paymentDto);
return "OK";
}
Поскольку я всегда посылаю данные запроса (например, пост по следующей ссылке: api/payment?id=123&whatever
)
Я добавил:
.antMatchers("/api/payment?**").access("hasIpAddress('XXX.XXX.X.XX')")
Но это не сработало.
UPDATE 2
Я изменил размещение моего antMatcher так:
http.exceptionHandling()
.authenticationEntryPoint(authEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/", "/app/**", "/assets/**", "/fonts/**", "/images/**").permitAll()
.antMatchers("/authentication/login", "/login.html").anonymous()
.antMatchers("/api/products/**").permitAll()
.antMatchers("/api/cities/**").permitAll()
.antMatchers("/api/order/**").permitAll()
.antMatchers("/api/payment").hasIpAddress("XXX.XXX.X.XX")
.anyRequest().authenticated()
.and()
.csrf().requireCsrfProtectionMatcher(new CsrfRequestMatcher())
.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/authentication/login")
.successHandler(authSuccessHandler)
.failureHandler(authFailureHandler)
.and()
.logout()
.logoutUrl("/authentication/logout")
.logoutSuccessHandler(logoutSuccessHandler)
.deleteCookies(JSESSIONID_COOKIE, CSRF_COOKIE)
.invalidateHttpSession(true)
.permitAll();
Что теперь просто перенаправляет меня на страницу входа в систему, когда я пытаюсь сделать пост из данного Ip Адрес
Возможно, вы получаете NullPointerException – reos
@reos, нет NullPointerException. метод не выполняется вообще. – uksz
Возможно, IP имеет значение null и spring выбрасывает nullpointer – reos