11/*
2- * Copyright 2002-2022 the original author or authors.
2+ * Copyright 2002-2025 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1616
1717package org.springframework.security.config.annotation.web
1818
19+ import org.hamcrest.Matchers
1920import org.junit.jupiter.api.Test
2021import org.junit.jupiter.api.extension.ExtendWith
2122import org.springframework.beans.factory.annotation.Autowired
@@ -30,7 +31,9 @@ import org.springframework.security.core.userdetails.UserDetailsService
3031import org.springframework.security.provisioning.InMemoryUserDetailsManager
3132import org.springframework.security.web.SecurityFilterChain
3233import org.springframework.test.web.servlet.MockMvc
34+ import org.springframework.test.web.servlet.get
3335import org.springframework.test.web.servlet.post
36+ import org.springframework.test.web.servlet.result.MockMvcResultMatchers
3437
3538/* *
3639 * Tests for [WebAuthnDsl]
@@ -55,6 +58,40 @@ class WebAuthnDslTests {
5558 }
5659 }
5760
61+ @Test
62+ fun `webauthn and formLogin configured with default registration page` () {
63+ spring.register(DefaultWebauthnConfig ::class .java).autowire()
64+
65+ this .mockMvc.get(" /login/webauthn.js" )
66+ .andExpect {
67+ MockMvcResultMatchers .status().isOk
68+ header {
69+ string(" content-type" , " text/javascript;charset=UTF-8" )
70+ }
71+ content {
72+ string(Matchers .containsString(" async function authenticate(" ))
73+ }
74+ }
75+ }
76+
77+ @Configuration
78+ @EnableWebSecurity
79+ open class DefaultWebauthnConfig {
80+ @Bean
81+ open fun userDetailsService (): UserDetailsService =
82+ InMemoryUserDetailsManager ()
83+
84+
85+ @Bean
86+ open fun securityFilterChain (http : HttpSecurity ): SecurityFilterChain {
87+ http{
88+ formLogin { }
89+ webAuthn { }
90+ }
91+ return http.build()
92+ }
93+ }
94+
5895 @Configuration
5996 @EnableWebSecurity
6097 open class WebauthnConfig {
0 commit comments