400. HTTP Basic Authentication - dkkahm/study-springfamework5 GitHub Wiki
Set Log Level for Spring Security (application.properties)
logging.level.org.springframework.security=debug
Auto configuration
- default user
- user
- spring.security.user.name
- default password
- Random UUID, check console output
- spring.security.user.password
- all paths secured
- except actuator info and health
Test
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@WebMvcTest
public class BeerControllerIT {
@Autowired
WebApplicationContext wac;
MockMvc mockMvc;
@MockBean
BeerRepository beerRepository;
@MockBean
BeerInventoryRepository beerInventoryRepository;
@MockBean
BreweryService breweryService;
@MockBean
CustomerRepository customerRepository;
@MockBean
BeerService beerService;
@BeforeEach
void setUp() {
mockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.apply(springSecurity())
.build();
}
@WithMockUser("spring")
@Test
void findBeers() throws Exception {
mockMvc.perform(get("/beers/find"))
.andExpect(status().isOk())
.andExpect(view().name("beers/findBeers"))
.andExpect(model().attributeExists("beer"));
}
@Test
void findBeersWithHttpBasic() throws Exception {
mockMvc.perform(get("/beers/find")
.with(httpBasic("spring", "guru"))
// .with(anonymous())
)
.andExpect(status().isOk())
.andExpect(view().name("beers/findBeers"))
.andExpect(model().attributeExists("beer"));
}
}
- @WithMockUser will success with invalid user name
- Forcing user credentials into spring context
Configuration
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/webjars/**", "/login", "/resources/**").permitAll()
.antMatchers("/beers/find", "/beers**").permitAll()
.antMatchers(HttpMethod.GET, "/api/v1/beer/**").permitAll()
.mvcMatchers(HttpMethod.GET, "/api/v1/beerUpc/{upc}").permitAll()
.anyRequest().authenticated() // DENY ALL
.and()
.formLogin().and()
.httpBasic();
}
}