[JAVA] Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf

Überblick

Beim Testen der Formularauthentifizierung mit der folgenden Konfiguration in Spring Security ist ein 404-Fehler aufgetreten.

                       POST 
            --------------------------------->
 Formularbildschirm AuthenticationProvider
 ·Nutzername
 ・ Passwort <==================================
 Nutzerinformation

SecurityConfig.java


@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/webjars/**", "/css/");
    }

    @Override
    protected void configure(HttpSecurity http) {
        http.authorizeRequests()
                .antMatchers("signin").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginProcessingUrl("/authentication")
                .loginPage("signin")
                .failureUrl("signin" + "?error")
                .successForwardUrl("/hoge/list")
                .failureForwardUrl("/authenticationError")
                .usernameParameter("username")
                .passwordParameter("password")
                .and()
                .logout()
                .logoutSuccessUrl("signin");

}

TestClass.java


@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = HogeApplication.class)
public class TestClass {

    @Before
public void Anfrage vorbereiten() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                .build();
    }

    @Test
public void Mit Anforderungs-URL authentifizieren() throws Exception {
        ResultActions result = mvc.perform(
                MockMvcRequestBuilders.post("/authentication")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .param("username",Benutzerkonto)
                .param("password",Passwort)
        );
        result.andExpect(status().isOk())
                .andExpect(forwardedUrl("/hoge/list"));
    }
}
 Behauptung Ergebnisse

java.lang.AssertionError: Status 
Expected :200
Actual   :404

Problemumgehung

Nehmen Sie die folgenden zwei Problemumgehungen.

Unter Anwendung der obigen Ausführungen lautet die Testklasse wie folgt.

TestClass.java


@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = HogeApplication.class)
public class TestClass {

    @Before
public void Anfrage vorbereiten() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                .apply(springSecurity()) //Wenn dies nicht angewendet wird, ist es 404, auch wenn csrf gesetzt ist.
                .build();
    }

    @Test
public void Mit Anforderungs-URL authentifizieren() throws Exception {
        ResultActions result = mvc.perform(
                MockMvcRequestBuilders.post("/authentication")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .with(csrf())
                .param("username",Benutzerkonto)
                .param("password",Passwort)
        );
        result.andExpect(status().isOk())
                .apply(springSecurity()) //Wenn dies nicht angewendet wird, ist es 404, auch wenn csrf gesetzt ist.
                .andExpect(forwardedUrl("/hoge/list"));
    }
}

Informationen zu Formulareinstellungen

Offizielle Dokumentation erwähnt ebenfalls csrf (), veröffentlicht jedoch ausdrücklich Der Benutzername und das Kennwort wurden in der folgenden Implementierung nicht ohne Aufforderung an die Serverseite übergeben. Möglicherweise stimmt etwas nicht, aber ich weiß es nicht. .. ..

TestClass.java


public class TestClass {
Methoden, die den öffentlichen Parameter nicht übergeben() {
        ResultActions result2 = mvc.perform(formLogin("/authentication")
                .user(Benutzerkonto).password(Passwort));
        result2.andExpect(status().isOk())
                .andExpect(forwardedUrl("/clients/list"))
                .andDo(MockMvcResultHandlers.print());
        ResultActions result3 = mvc.perform(MockMvcRequestBuilders.post("/authentication")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .with(csrf())
                .with(user(Benutzerkonto).password(Passwort)));
        result3.andExpect(status().isOk())
                .andExpect(forwardedUrl("/clients/list"))
                .andDo(MockMvcResultHandlers.print());
    }
}

Das Ergebnis war das gleiche mit csrf (). AsHeader ().

Wenden Sie springSecurity an

Wenn springSecurity () nicht angewendet wird, ist es 404, auch wenn csrf () in MockMvcRequestBuilders # post festgelegt ist.

Recommended Posts

Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
Beim Hinzufügen einer Abhängigkeit wird eine Fehlermeldung angezeigt
Ein Hinweis zu "Stellen Sie mit einem selbstsignierten Zertifikat mit Javas Keytool keinen Zertifikatfehler aus"
Implementierte Authentifizierungsfunktion mit Spring Security ②
Implementierte Authentifizierungsfunktion mit Spring Security ③
Implementierte Authentifizierungsfunktion mit Spring Security ①
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Ich erhalte einen Ruby-Versionsfehler, wenn ich versuche, Rails zu starten.
DB-Authentifizierung mit Spring Security und Hashing mit BCrypt
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
[Visual Studio Code] Beim Ausführen des Debugs bei Verwendung von rbenv wird ein Syntaxfehler angezeigt
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Fügen Sie mit Spring Security Ihre eigenen Authentifizierungselemente hinzu
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Nach dem Erneuern des Zertifikats mit CircleCI × fastlane erhalte ich den Fehler Exit status: 65.
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Ein Memorandum beim Versuch von Spring Data JPA mit STS
Informationen zur Spring Security-Authentifizierung
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Ich habe versucht, mit Spring Data JPA zu beginnen
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Beim Verschlüsseln mit Node + Docker wurde eine Fehlermeldung angezeigt
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Beim Hochladen einer Datei mit Spring Boot wird eine Fehlerbehandlung durchgeführt, wenn die maximale Dateigröße überschritten wird.
Ich habe eine Frage. Beim Abspielen eines Videos in Listview mit Android tritt ein Fehler auf.
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Neuer Mitarbeiter hat versucht, mit Spring Security eine Authentifizierungs- / Autorisierungsfunktion von Grund auf neu zu erstellen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Beginnen Sie mit Spring Boot
Anmeldefunktion mit Spring Security
Fehler beim Spielen mit Java
Fehler beim Einführen der SNS-Authentifizierung
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Wenn ich zu Heroku drücke, ärgere ich mich darüber, dass das Vorkompilieren von Assets fehlgeschlagen ist.
Ich habe versucht, einen OAuth-Client mit Spring Boot / Security (LINE-Anmeldung) zu implementieren.
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Spring Security-Nutzungsnotiz Authentifizierung / Autorisierung
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Ich habe mit Swing eine GUI erstellt
Erhalten Sie Validierungsergebnisse mit Spring Boot
Erfahren Sie mehr über die Architektur der Spring Security-Authentifizierungsverarbeitung
Oauth2-Authentifizierung mit Spring Cloud Gateway
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
Über Fehler bei der Implementierung der Federvalidierung
Ich erhalte eine Fehlermeldung bei der Bundle-Installation und Puma kann nicht installiert werden.
Spring Boot + MyBatis Ich erhalte diesen Fehler, wenn ich die Datenbank nicht einstelle
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 2/3 (Formularvorlagenerstellung) zu drucken.
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
Bei der Registrierung eines neuen Benutzers wurde ein Fehler namens ActiveRecord :: NotNullViolation und der Umgang damit angezeigt.
Bei der Einführung von JOOQ in Spring Boot wurde eine Geschichte behandelt, die behandelt wurde, weil bei Liquidbase ein Fehler aufgetreten ist