2011-02-25 27 views
6

JAX-RS uç noktasını korumaya çalışıyorum ve şu anda kimlik doğrulama ve yetkilendirmenin nasıl çalıştığını anlamaya çalışıyorum. Çoğu örnek, sadece Java EE App-Server rolünden web.xml yoluyla piggyback yaptıklarından oldukça basittir.JAX-RS ve özel yetkilendirme

Java EE AS ​​rollerinden başka bir şeyin nasıl kullanıldığını merak ediyorum. Örneğin: Oturum veya bir çeşit belirteci (veya bir çeşit tanımlayıcı) kullanmak istiyorum.

cevap

7

Bu, kullandığınız JAX-RS uygulamasına bağlıdır. Embed Jetty üzerinde Jersey kullanıyorum. Eğer HttpServletRequest yılında Principal sahip olduktan sonra

SecurityHandler sh = new SecurityHandler(); 

// the UserRealm is the collection of users, and a mechanism to determine if 
// provided credentials are valid 
sh.setUserRealm(new MyUserRealm()); 

// the Authenticator is a strategy for extracting authentication credentials 
// from the request. BasicAuthenticator uses HTTP Basic Auth 
sh.setAuthenticator(new BasicAuthenticator()); 

JAX-RS istek bağlamı içinde bu enjekte edebilir,

How to Configure Security with Embedded Jetty bakınız.

public abstract class AbstractResource { 
    private Principal principal; 
    @Context 
    public void setSecurityContext(SecurityContext context) { 
     principal = context.getUserPrincipal(); 
    } 
    protected Principal getPrincipal() { 
     return principal; 
    } 
} 

@Path("/some/path") 
public class MyResource extends AbstractResource { 
    @GET 
    public Object get() { 
     Principal user = this.getPrincipal(); 
     // etc 
    } 
} 
2

Yasal Uyarı: Gerçekten, gerçekten, gerçekten ihtiyacınız yoksa, kendi güvenlik çerçevenizi rol yapmayın.

Jersey'de OAuth filter ürününe bakın. Kimlik bilgilerini, normal olarak anlaşılanlardan (HTTP Temel) farklı bir biçimde tutan Yetkilendirme başlığını okur. Bu kimlik bilgilerini, daha sonra gerçekte uygulanmakta olan Roles Allowed Filter'a eklerseniz, güvenliği uygulamak için kullanabileceğiniz rollere dönüştürür (@RolesAllowed). Bu filtrelerin nasıl çalıştığına bakmayı deneyin.

İlgili konular