參考以下網站, 建立一個http basic authentication 為例
https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
code
@SpringBootApplication
@RestController
public class BasicAuthApplication {
public static void main(String[] args) {
SpringApplication.run(BasicAuthApplication.class, args);
}
@RequestMapping("/")
public String Index() {
return "index page";
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authorize) -> authorize
.requestMatchers("/js/**").permitAll()
.anyRequest().authenticated()
)
.csrf(c -> c.disable())
.httpBasic(Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
User.UserBuilder users = User.withDefaultPasswordEncoder();
UserDetails user =
users
.username("user")
.password("user")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
加入csrf
https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html#csrf-components
測試
@SpringBootTest
@AutoConfigureMockMvc
class BasicAuthApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
void shouldReturnDefaultMessage() throws Exception {
MvcResult mvcResult = mockMvc
.perform(get("/hello").with(httpBasic("user","user")))
.andReturn();
System.out.println(mvcResult.getResponse().getContentAsString());
}
}
