Как отправлять и получать данные из службы REST (JavaFX, RestEasy, Spring Security) - PullRequest
0 голосов
/ 08 сентября 2018

Я создаю приложение в Spring Boot и JavaFX в качестве клиента. Я использую RestEasy для отправки и получения данных из сервиса REST. Когда я не использую Spring Security, данные обычно отправляются и принимаются. Когда я добавляю Spring Security, у меня нет доступа к данным, и я не знаю, как получить к ним доступ с помощью RestEasy.

Мой тест REST Api:

@RequestMapping(value = "/test", method = RequestMethod.POST)
public ResponseEntity test(@RequestBody Usr usr) {
    System.out.println(usr);
    return new ResponseEntity("Ok", HttpStatus.OK);
}

@RequestMapping(value = "/test2", method = RequestMethod.GET)
public ResponseEntity test2() {
    System.out.println("Test2");
    return new ResponseEntity("OkGet", HttpStatus.OK);
}

Мой код, который связан с этим:

Вкл / конечная точка теста:

ClientRequest clientRequest = new ClientRequest(applicationUrl);
clientRequest.body("application/json", usr);
String o = (String)clientRequest.post(Usr.class).getEntity(String.class);
System.out.println("Resp: " + o);

Вкл / конечная точка test2:

ClientRequest clientRequest = new ClientRequest(applicationUrl2);
String o = (String)clientRequest.get().getEntity(String.class);
System.out.println("Resp: " + o);

Этот код работает, когда я не использую Spring Secuirty.

Я пытаюсь что-то вроде этого, но не работает, возвращает пустую строку и на стороне сервера данные в консоли не выводятся:

DefaultHttpClient client = new DefaultHttpClient();
    client.getCredentialsProvider().setCredentials(
            new AuthScope("localhost", 8090),
            new UsernamePasswordCredentials("a", "a")
    );
ApacheHttpClient4Executor executor = new ApacheHttpClient4Executor(client);
ClientRequest clientRequest = new ClientRequest(applicationUrl2, executor);
String o = (String)clientRequest.get().getEntity(String.class);
System.out.println("Resp: " + o);

Обновление - добавление конфигурации Spring Security

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/test", "/test2").authenticated()
            .and().formLogin();
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("a")
            .password("{noop}a")
            .roles("USER");
}

1 Ответ

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

Я думаю, у меня есть решение. Я удалил .formLogin() и добавил

.and().httpBasic()
.and().csrf().disable();

Первой проблемой было, вероятно, перенаправление на страницу входа в систему, а затем отсутствие авторизации. Я покину пост, это может быть кому-то полезно. : D

...