Blog o programování a webu - Java, Spring, Python a jiné

Remember me – Java, Spring Security

Aug 14, 13 • SpringComments OffRead More »

Možnost pamatovat si přihlášení uživatele i po vypršení session je vlastnost mnoha internetových systémů. Ukažme si jak tuto funkcionalitu implementovat do Java aplikace s využitím Spring Security.

Je důležité předem zdůraznit, že automatické přihlášení se provádí při vypršení session a to jen po předem určenou dobu. K tomu je využíváno speciální cookie, obsahující kryptované přihlašovací jméno a heslo.

 

Spring Security:

<security:http auto-config="true" use-expressions="true" access-denied-page="/denied" >
    <security:intercept-url pattern="/" access="permitAll"/>
    <security:intercept-url pattern="/login" access="permitAll"/>
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>

    <security:form-login login-page="/login"
      login-processing-url="/j_spring_security_check"
      authentication-failure-url="/login?error=true"
      default-target-url="/admin/search"/>

    <security:logout logout-url="/logout"
      logout-success-url="/"
      invalidate-session="true"
      delete-cookies="JSESSIONID"/>

    <security:remember-me key="supertajnyheslobackora" token-validity-seconds="86400"/>
 </security:http>

Pro nás je nejdůležitejší jeden řádek

<security:remember-me key="supertajnyheslobackora" token-validity-seconds="86400"/>

Key je klíč ke generování obsahu cookie, tedy pro MD5 hash z přihlašovacího jména a hesla.  Defaultní platnost cookie je 14 dní od posledního úspěšného přihlášení, to lze však snadno přenastavit pomocí token-validity-seconds. V tomto případě je platnost cookie omezena na jeden den.

 

Stránka s přihlášením:
Do přihlašovacího formuláře přidáme checkbox

<div class="span3">
<span>Zapamatuj si mě</span>
</div>

<div class="span4">
<input type="checkbox" name="_spring_security_remember_me"/>
</div>

 

Cookie:
Jak jsem již zmínil na začátku, je pro automatické přihlášení vytvořena cookie SPRING_SECURITY_REMEMBER_ME_COOKIE. Obsahem cookie je hash uživatelského jména a hesla vytvořený pomocí MD5 a klíče (definovaného ve Spring config). Budeme-li chtít být přesní, tak obsah cookie má formát username + “:” + expiryTime + “:” + Md5Hex(username + “:” + expiryTime + “:” + password + “:” + key). Jak je patrné z obsahu, cookie bude platná pouze pokud se nezmění uživatelské jméno, heslo nebo i key na straně aplikace.

 

Ověření funkčnosti je snadné. Po přihlášení stačí smazat JSESSIONID cookie a i poté by se aplikace měla chovat jako v případě přihlášeného uživatele a měla by být vytvořena nová JSESSIONID cookie.

 

Snad tato snadno implementovatelná drobnost přispěje k lepšímu uživatelskému komfortu vašich aplikací.

Tags: , ,

Comments are closed.