Web uygulamamın basit bir dinlendirici arabirimi oluşturmak için JAX-RS'yi kullanmaya başladım. Şu anda, yalnızca tüm uygulama verilerine erişimi olan bir iç istemci tarafından kullanılıyor (salt okunur) ve erişim için http temel kimlik doğrulamasını kullanıyorum. Uygulamamın görünüm katmanının bir parçası olarak kullanmaya başlamak istiyorum ve belirli işlemlere yalnızca bir kullanıcı web uygulaması aracılığıyla giriş yaptığında izin verilir. Çok sayıda kodu tekrar etmeden, her iki kimlik doğrulama biçimini zarif bir şekilde kullanmamı sağlayan bir desen bulmaya çalışıyorum. İşte kabaca şu ki:Java Restful Web Services (jax rs) kimlik doğrulama modeli
Veritabanında saklanan bir uygulama oturumu yüklemek için ilk önce bir sınıf.
@Path("/protected/resource")
public class ProtectedResource {
@GET
@Produces(MediaType.TEXT_JSON)
@Path("{userId}")
public String getProtectedResourceJson(@Context HttpServletRequest request, @PathParam("userId") Integer userId) {
// Return Charity List XML
AppSession session = RestUtil.getAuthenticatedSession(request);
if (session.canAccessUser(userId)) //get Json...
}
}
İşte amacıyla, AppSession en temel bakış var:
public class RestUtil {
public static AppSession getAuthenticatedSession(HttpServletRequest request) {
AppSession session;
String remoteUser = request.getRemoteUser();
if (remoteUser != null) {
session = SessionRepository.loadSessionByRemoteUser(remoteUser);
} else {
session = SessionRepository.loadSessionById(request.getSession().getId());
}
return session;
}
}
İşte bir kimliği doğrulanmış kullanıcı için erişilebilir olduğu veya bizim http temel kimlik doğrulaması istemci bir yöntemle, bizim bir kaynak Bu soru:
public class AppSession {
User authenticatedUser;
String remoteUser;
public boolean canAccessUser(Integer userId) {
if (remoteUser != null) {
//this client has access to all users
return true;
} else if (authenticatedUser.getId().equals(userId)) {
//this is local client, calling the service from a view
//only has access to authenticatedUser
return true;
} else {
return false;
}
}
}
Dahası, sadece url işaret yetkisiz üçüncü kişilerin, nasıl kimlik doğrulama her türlü gerektirmeyen hizmetleri ve g için Verileri boş zamanlarında mı kullanıyorlar?
. Artı tarafta, her zaman Aspectj içine bakmak için bir bahane istedim. –