[JAVA] Korrespondenz des Teils, in dem die Authentifizierung # getDetails im Komponententest der Federsicherheit durchgeführt wird

Hintergrund

Im Spring-Security-Unit-Test gab es eine Stelle, an der die Controller-Methode "Authentication # getDetails" lautete (siehe unten), und dies wurde zu "NullPointerException".

SampleDetails details = (SampleDetails)auth.getDetails();
details.getHoge();

Es schien keine Möglichkeit zu geben, dies für WithMockUser festzulegen, daher dachte ich über einen anderen Weg nach.

Bewältigung

pom.xml


	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
	</parent>

	<properties>
		<java.version>10.0</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</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-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-test</artifactId>
			<scope>test</scope>
		</dependency>

Unten ist der Testcode.

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import kagamihoge.springmvcsample.controller.SampleDetails;


@RunWith(SpringRunner.class)
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        classes = App.class)
@AutoConfigureMockMvc
public class SecurityTest {
    @Autowired
    private MockMvc mvc;

    @Test
    @WithMockUser
    public void whenGetCustomers_thenStatus200() throws Exception {
        UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
        auth.setDetails(new SampleDetails());
        
        mvc.perform(get("/hoge"))
                .andExpect(status().isOk());
    }
}

Nun, ich bin sicher, ich werde es mit der Überzeugung besetzen, dass "UsernamePasswordAuthenticationToken" verwendet wird, und in "setDetails" werde ich die entsprechenden Werte zum Testen eingeben. Ich habe mich mit dieser Methode befasst.

Recommended Posts

Korrespondenz des Teils, in dem die Authentifizierung # getDetails im Komponententest der Federsicherheit durchgeführt wird
In Spring-Security ist die Weiterleitungs-URL meines Anmeldebildschirms falsch und die Anmeldung schlägt fehl.
[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
In Time.strptime ist% j (Gesamtdatum des Jahres)
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Was ist die Darstellung von Domänenwissen im [DDD] -Modell?
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
802.1X-Authentifizierung für das Netzwerk der Bonding-Einstellung in CentOS7
[Android] Probieren Sie den aus, der den in Spielen üblichen Effekt auf dem berührten Teil des Bildschirms anzeigt