Útmutató a tavaszi foglalkozáshoz

REST felső

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Tavaszi ülés egyszerű célja, hogy felszabadítsa a munkamenet-kezelést a szerveren tárolt HTTP-munkamenet korlátai alól.

A megoldás megkönnyíti a munkamenetadatok megosztását a felhőben lévő szolgáltatások között anélkül, hogy egyetlen tárolóhoz (azaz Tomcathoz) lenne kötve. Ezenkívül több munkamenetet támogat ugyanabban a böngészőben, és munkameneteket küld egy fejlécben.

Ebben a cikkben felhasználjuk Tavaszi ülés a hitelesítési információk kezeléséhez egy webalkalmazásban. Míg Tavaszi ülés adatok megmaradhatnak a JDBC, a Gemfire vagy a MongoDB használatával, felhasználni fogjuk Redis.

Bevezetés a Redis nézze meg ezt a cikket.

2. Egyszerű projekt

Először hozzunk létre egy egyszerű Tavaszi csizma projekt, amely későbbi munkamenet-példáink alapjául szolgál:

 org.springframework.boot spring-boot-starter-parent 2.2.6.RELEASE org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot- indító-teszt teszt 

Az alkalmazás fut Tavaszi csizma és a szülő pom minden verzióhoz verziót biztosít. Az egyes függőségek legfrissebb verziója itt található: spring-boot-starter-security, spring-boot-starter-web, spring-boot-starter-test.

Adjunk hozzá néhány beállítási tulajdonságot is a Redis szerverhez alkalmazás.tulajdonságok:

spring.redis.host = localhost spring.redis.port = 6379

3. Tavaszi indítás konfigurálása

A tavaszi bakancshoz, elég hozzáadni a következő függőségeket, és az automatikus konfiguráció gondoskodik a többiről:

 org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis 

A rendszerindító szülőt használjuk pom hogy itt állítsam be a verziókat, így ezek garantáltan működnek más függőségeinkkel is. Az egyes függőségek legújabb verziója itt található: spring-boot-starter-data-redis, spring-session.

4. Standard tavaszi konfiguráció (nincs indítás)

Vessünk egy pillantást az integrálásra és a konfigurálásra is tavaszi ülés tavaszi csizma nélkül - csak sima rugóval.

4.1. Függőségek

Először is, ha hozzátesszük tavaszi ülés egy szokásos tavaszi projekthez kifejezetten meg kell határoznunk:

 org.springframework.session tavaszi ülés 1.2.2.RELEASE org.springframework.data spring-data-redis 1.5.0.RELEASE 

E modulok legújabb verziói itt találhatók: spring-session, spring-data-redis.

4.2. Tavaszi munkamenet konfigurálása

Most adjunk hozzá egy konfigurációs osztályt a következőhöz: Tavaszi ülés:

@Configuration @EnableRedisHttpSession nyilvános osztály A SessionConfig kiterjeszti az AbstractHttpSessionApplicationInitializer {@Bean public JedisConnectionFactory connectionFactory () {return new JedisConnectionFactory (); }}

@EnableRedisHttpSession és a kiterjesztése AbstractHttpSessionApplicationInitializer létrehoz egy szűrőt és összekapcsolja az összes biztonsági infrastruktúránkat, hogy aktív munkameneteket keressen és feltöltse a biztonsági kontextust a Redis.

Töltsük ki ezt az alkalmazást egy vezérlővel és a biztonsági konfigurációval.

5. Az alkalmazás konfigurálása

Keresse meg a fő alkalmazásfájlunkat, és adjon hozzá egy vezérlőt:

@RestController public class SessionController {@RequestMapping ("/") public String helloAdmin () {return "hello admin"; }}

Ez végpontot ad nekünk a teszteléshez.

Ezután adja hozzá a biztonsági konfigurációs osztályunkat:

A @Configuration @EnableWebSecurity nyilvános osztály A SecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) Kivételt dob ​​{az. ("ADMIN"); } A @Orride védett void konfiguráció (HttpSecurity http) a {http .httpBasic (). És () .authorizeRequests () .antMatchers ("/"). HasRole ("ADMIN") .anyRequest (). Hitelesített (); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Ez alapvető hitelesítéssel védi végpontjainkat, és beállít egy felhasználót, akivel tesztelni lehet.

6. Teszt

Végül teszteljünk mindent - itt meghatározunk egy egyszerű tesztet, amely 2 dolgot tesz lehetővé:

  • fogyasztani az élő webalkalmazást
  • beszélj Redisszel

Először állítsuk be a dolgokat:

public class SessionControllerTest {private Jedis jedis; privát TestRestTemplate testRestTemplate; privát TestRestTemplate testRestTemplateWithAuth; privát karakterlánc tesztUrl = "// localhost: 8080 /"; @ Nyilvános void előtt clearRedisData () {testRestTemplate = new TestRestTemplate (); testRestTemplateWithAuth = új TestRestTemplate ("admin", "jelszó", null); jedis = új Jedis ("localhost", 6379); jedis.flushAll (); }}

Figyelje meg, hogyan állítjuk be mindkét klienst - a HTTP és a Redis klienst. Természetesen ezen a ponton a szervernek (és a Redisnek) működnie kell és működniük kell, hogy kommunikálni tudjunk velük e teszteken keresztül.

Kezdjük azzal, hogy teszteljük Redis üres:

@Test public void testRedisIsEmpty () {Eredmény beállítása = jedis.keys ("*"); assertEquals (0, eredmény.méret ()); }

Most tesztelje, hogy a biztonságunk 401-et ad vissza hitelesítetlen kérések esetén:

@Test public void testUnauthenticatedCantAccess () {ResponseEntity eredmény = testRestTemplate.getForEntity (testUrl, String.class); assertEquals (HttpStatus.UNAUTHORIZED, result.getStatusCode ()); }

Ezt követően ezt teszteljük Tavaszi ülés kezeli a hitelesítési tokent:

@Test public void testRedisControlsSession () {ResponseEntity eredmény = testRestTemplateWithAuth.getForEntity (testUrl, String.class); assertEquals ("hello admin", result.getBody ()); // bejelentkezés sikerült RedisResult = jedis.keys ("*"); assertTrue (redisResult.size ()> 0); // a redis munkamenetadatokkal van feltöltve String sessionCookie = result.getHeaders (). get ("Set-Cookie"). get (0) .split (";") [0]; HttpHeaders fejlécek = new HttpHeaders (); fejlécek.add ("Cookie", sessionCookie); HttpEntity httpEntity = új HttpEntity (fejlécek); eredmény = testRestTemplate.exchange (testUrl, HttpMethod.GET, httpEntity, String.class); assertEquals ("hello admin", result.getBody ()); // hozzáférés a munkamunkákkal működött jedis.flushAll (); // az összes kulcs törlése a redis eredményben = testRestTemplate.exchange (testUrl, HttpMethod.GET, httpEntity, String.class); assertEquals (HttpStatus.UNAUTHORIZED, result.getStatusCode ()); // a hozzáférés megtagadva, miután a munkameneteket eltávolították a redisben}

Először a tesztünk megerősíti, hogy kérésünk sikeres volt az adminisztrációs hitelesítési adatok használatával.

Ezután kivonjuk a munkamenet értékét a válasz fejlécéből, és hitelesítésként használjuk fel második kérésünkben. Ezt érvényesítjük, majd töröljük az összes adatot Redis.

Végül a munkamenet süti segítségével újabb kérelmet nyújtunk be, és megerősítjük, hogy kijelentkeztünk. Ez megerősíti ezt Tavaszi ülés kezeli az üléseinket.

7. Következtetés

Tavaszi ülés egy hatékony eszköz a HTTP munkamenetek kezelésére. Konfigurációs osztályra egyszerűsített munkamenet-tárolással és néhány Maven-függőséggel most több alkalmazást is összekapcsolhatunk ugyanazokkal Redis példány és megoszthatja a hitelesítési információkat.

Mint mindig, az összes példa elérhető a Github oldalon.

REST alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT