11 Şubat 2016 Perşembe

Spring Framework ve Spring Security'i 4'e yükseltmek



Geliştirmekte olduğumuz spring mvc projesinin versiyonunu 3.x'ten 4.x'e yükseltmek istedik fakat bu geçişle birlikte birkaç yerde de değişiklik yapmak zorunda kaldık.

What's new adresinden yapılan yenilikleri okuyabilirsiniz.

Türkçe kaynak da bulunması adına, yaptığımız değişiklikleri buraya not edeceğim ki belki birilerinin işine yarar.

Role'ler kısıtlamasında yapılan değişiklikler bizi çok etkilemedi çünkü henüz o kısıtlamaları kullanmıyorduk.

pom.xml tarafında değiştirilmesi gerekenler;

Eğer versiyonları değişkenden alacak şekilde tanımlamışsanız işiniz kolay yoksa her  bağımlılıklar (dependency) versiyonu eklemeniz gerekecek

örnek olarak;

<spring.version>4.2.4.RELEASE</spring.version>
<spring-security.version>4.0.3.RELEASE</spring-security.version>



                <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>

ya da

               <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

aynı şekilde diğerlerini de değiştimeniz gerek.

gel gelelim bundan sonrasında yaşanan sorunların çözümlerine

Login sayfasında yaptığımız;

1. Değişiklik

<form name='loginForm'
action="<c:url value='j_spring_security_check' />" method='POST'
role="form">

"j_spring_security_check" ifadesi kalkmış yerine "/login" ifadesini aşağıdaki gibi kullanabilirsiniz.

<c:url var="loginUrl" value="/login"/>

yani; kaynak


2. Değişiklik 

Sprinf security 4 ile birlikte CsrfToken desteği eklenmiştir. Bunu sayfalarınıza eklemek için;

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

değerlerini <form> tagleri arasına eklemeniz gerekiyor. Aşağıdaki



3. Değişiklik

Bir sonraki değişikliğimiz ise "Remember Me" (Beni Hatırla) tarafında idi.

xml tarafında
<http>
 ...
 <remember-me />
</http>

gibi bir tanımlamanız var ise,

aşağıdaki tanımlamayı da eklemeniz gerekiyor;

<http>
 ...
<remember-me 
remember-me-parameter="_spring_security_remember_me"
remember-me-cookie="SPRING_SECURITY_REMEMBER_ME_COOKIE" />
</http>

Alternatif diğer yol ise;
<c:url var="loginUrl" value="/login"/>
<form action="${loginUrl}" method="post">
 ...

 <p><label for="remember-me">Remember Me</label></p>
 <input type="checkbox" id="remember-me" name="remember-me"/> 

 <div>
  <input name="submit" type="submit"/>
 </div>
</form>

<input type="checkbox" id="remember-me" name="remember-me"/>  şeklindeki yaklaşımdır.


Xml tarafında herhangi bir düzenleme yapmadan sadece, hiçbir eklide <remember-me> tag'i kullanmadığınızda gerçekleşen olay aşağıdaki gibidir;

1. Login oldunuz ve çıkış yapmadan tarayıcınızı tamamen kapatıp yeni bir oturum açtınız.
2. Sizi tekrar login sayfasına yönlendirecektir.

Xml tarafındaki tanım;
<remember-me /> tag var ise durum aşağıdaki gibi oluyor;
1. Login oldunuz ve çıkış yapmadan tarayıcınızı tamamen kapatıp yeni bir oturum açtınız.
2. Sizi login olma ihtiyacı olmadan giriş yaptıracaktır.

Eğer böyle bir şey olsun istemiyorsanız aşağıdaki gibi değerleri set etmeniz gerekmektedir.
<remember-me 
remember-me-parameter="_spring_security_remember_me"
remember-me-cookie="SPRING_SECURITY_REMEMBER_ME_COOKIE" />



Hiç yorum yok:

Yorum Gönder