用 spring boot 寫 RESTful service,如果要單元測試很簡單,如下:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class LibraryControllerTest {
@LocalServerPort
private int port;
@Test
public void test() {
RestTemplate rest = new RestTemplate();
List model = rest.getForObject("http://localhost:" + port + "/library/book", List.class);
assertNotNull(model);
}
}
只要加上紅色的部份,執行單元測試不需要先啟動 ap server,直接執行,spring boot 會自動執行 embedded tomcat 並且動態的找到一個可以用的 port 進行測試。但是 … 如果只是這樣寫,很可能測試時會出現 403 Forbidden 的錯誤,這是因為 spring boot 自動加上的 web security,所以,要改變一下設定,如下,我新增了一個 SecurityConfig 的類別 …
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll();
}
}
這個類別要繼承 WebSecurityConfigurerAdapter,並 override configure(HttpSecurity http) method,在裡面改變 request 的權限設定,我這裡很偷懶的全部的 request 都允許存取,實務上當然會加上一些限制。
沒有留言:
張貼留言