Útmutató a tavaszi foglalkozáshoz
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 FOLYAMATOT1. Á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ó