2013-07-05 32 views
13

REST web servisine yeni başlayan biriyim ve ilk web servisimi oluşturdum.
Hizmetimde kullanıcı istediği Kullanıcı adı ve şifreyi vererek basit bir form aracılığıyla profil oluşturabilir.Basit HTTP Auth REST webservice (Java + Jersey) ile nasıl kullanılır?

Kullanıcı oturum açma sırasında kullanıcı kimlik bilgilerini nasıl denetlerim ??
Kullanıcının giriş yapmış olduğunu doğrulayan basit bir form var ama add/update/delete çeşitli profil işlemlerini gerçekleştirdiğinde kullanıcıyı nasıl doğrulayacak?

Örneğin:
FB'de oturum açtığınızda, kimlik bilgileriniz olan ve "İletim Durumu" gibi işlemler gerçekleştirdiğinizde bir arkadaşa mesaj gönderen bir tanımlama bilgisi depolar. Kimlik bilgileriniz için bir kimlik bilgisine sahip olduğu ve sadece bu çerezi kullandığı için ...

Ancak REST'de çerez kullanmıyoruz, böylece sonraki seçenek HTTP üstbilgileridir. Ve HTTP başlık .ie üzerinden kullanıcı bilgilerini göndermek ve alma için nasıl bilmek istiyorum
Basic HTTP Auth

+0

Bu konuda daha fazla yorum yapmanıza gerek var mı? Cevabınız olmasa ve cevabım size yardımcı olduysa, bu soruya gönderdiğim gönderiyi kabul edebilirsiniz. Greetz :) – benjiman

cevap

29

İstemci Tarafı

HTTP Authorization başlığını kullanmak API kimlik bilgilerini göndermek için, kimlik belirtmeden Basic username:password şeklinde. Kullanıcı adı: şifre Dize, Base64 adı verilen bir kodlama şeması kullanılarak kodlanmalıdır. Yani Örnek başlık şöyle görünebilir: dinlenme şartname istemci-sunucu iletişimi vatansız olması gerektiğini belirttiği gibi

Authorization: Basic d2lraTpwZWRpYQ== 

, her istek üzerine kimlik bilgileriyle başlığı dahil var. Normalde, müşteriyi tanımlamak için, her istekte kimlik bilgilerini girmesi gerekmeyecek şekilde, kullanıcı tarafında bir oturum çerezi kullanacaksınız.

Sunucu Tarafı sizin Jersey DİNLENME Hizmet içi kimlik bilgilerini kontrol etmek için, yakalamak ve gelen tüm istekleri yakalamak için gereklidir. Jersey bunu yapmak için ContainerRequestFilters adlı bir kavram sağlar. Eğer bu gibi web.xml''deki servlet'dir tanımı içinde bu tip filtreler eklemek olabilir Eğer Tomcat kullanın, örneğin:

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
    <param-value>your.package.BasicAuthFilter</param-value> 
</init-param> 

başvurulan sınıf BasicAuthFilter ihtiyaçları Formalar ContainerRequestFilter arabirimini uygulayan ve public ContainerRequest filter(ContainerRequest request) yöntemini geçersiz kılmak için. yöntemin İçerisinde temelde aşağıdakileri:

  • bunları deşifre isteğin Yetkilendirme başlığından Base64 kodlanmış kimlik bilgilerini getirme (yani kullanarak javax.xml.bind.DatatypeConverter.parseBase64Binary())
  • sizin UserDao (ya da diğer veri kaynağı sağlayıcı) kullanmak Kimlik bilgilerinin geçerli olup olmadığını kontrol etmek için , doğrulama (0, yani bir hata başarısız olursa 401 Unauthorized Kimlik bilgileri geçerliyse throw new WebApplicationException(Status.UNAUTHORIZED))
  • , sadece o

Sen this blog yayınında çok iyi bir örnek bulabilirsiniz işlemek için sorumludur Jersey Kaynak onu temsilci amacıyla isteği geri çevirmek.

+2

sağlanan bağlantıdaki örnek sadece JERSEY 1.x ile çalışır. Ve 2.X ile çalışmıyor. – lonelyloner

+1

Bağlantılı blog gönderisi, Jersey 2.x örneğine bir bağlantı içerir: https://simplapi.wordpress.com/2015/09/17/jersey-jax-rs-implements-a-http-basic-auth-decoder -için-2-x-dalı / – CalumMcCall

İlgili konular