2017-08-06 13 views
0

残りのAPIをテストするためにSpring Bootテストを作成しようとしています。その結果、プリンシパルをリクエストから取得し、それを使用してユーザーを識別できます。 {:1502014507361、 "ステータス" 403、 "エラー": "禁止"、 "メッセージ": "アクセス 拒否されました"、 "パス": "/ hello" を "タイムスタンプ"}Spring TestRestTemplate認証

サーバは

を返します

私はここで何が欠けていますか?

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class RestTemplateTest { 

    @Autowired 
    TestRestTemplate testRestTemplate; 

    @Test 
    public void testit() { 

     testRestTemplate.withBasicAuth("user", "password"); 
     String responsePayload = testRestTemplate.getForObject("/hello", String.class); 
    } 



@RestController 
public class GreetingController { 

    @RequestMapping("/hello") 
    public String heipat(Principal principal) { 
     String string = "hello there"; 
     return string; 
    } 



    @Configuration 
    @EnableWebSecurity 
    static class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

     @Override 
     public void configure(HttpSecurity httpSecurity) throws Exception { 
      httpSecurity.authorizeRequests().anyRequest().hasRole("USER"); 
     } 

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

    } 

答えて

0

まず認証を受ける必要があります。 /login APIをリクエストするようなものです。 はまた、あなたがこれを行うことによって、誰でもログインAPIにアクセスできるようにする必要があります。

http.csrf().disable().authorizeRequests() 
    .antMatchers("/login").permitAll() 

あなたは基本的なusernamerAndPassowrd認証を持っていますWebSecurityConfig含まれている場合。

+0

助けになりません。まだ何かが足りない? – catch22

+0

あなたがログインするまでAPI '/ hello'にアクセスすることはできません。あなたはまずあなた自身を認証してからリクエストを送信する必要があります。 APIを '.antMatchers("/hello ")を使って公開することができます。 –

関連する問題