[英]How to call different methods from single webservices class
我有一個以下RESTful webservice,我有兩個http get方法。 一個功能登錄,其他功能從應用程序注銷用戶。 以下是代碼:
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
/**
* REST Web Service
*
* @author Pointer
*/
@Path("generic")
public class GenericResource {
@Context
private UriInfo context;
/**
* Creates a new instance of GenericResource
*/
public GenericResource() {
}
/**
* Retrieves representation of an instance of
* com.ef.apps.xmpp.ws.GenericResource
*
* @return an instance of java.lang.String
*/
@GET
@Produces("text/html")
public String SignIn(@QueryParam("username") String username, @QueryParam("password") String password, @QueryParam("extension") String extension) {
//TODO return proper representation object
return "Credentials " + username + " : " + password + " : " + extension;
}
@GET
@Produces("text/html")
public String SignOut(@QueryParam("username") String username, @QueryParam("password") String password, @QueryParam("extension") String extension) {
//TODO return proper representation object
return "Credentials " + username + " : " + password + " : " + extension;
}
}
現在,我在哪里指定要為http get調用的函數?
您應該使用注釋路徑將這兩種方法相互分開
@Path("/SignIn")
@GET
@Produces("text/html")
public String SignIn(@QueryParam("username") String username, @QueryParam("password") String password, @QueryParam("extension") String extension) {
//TODO return proper representation object
return "Credentials " + username + " : " + password + " : " + extension;
}
和@Path(“ / SignOut”)用於上述其他方法。
然后調用適當的方法登錄或注銷用戶。
登錄/注銷應謹慎處理,即確保使用正確的通道安全性(例如SSL)和身份驗證機制-查看安全性框架(例如Apache Shiro,Spring Security等)。
談到您的問題(並從與處理安全性/身份驗證有關的所有問題中抽象出來),您可能擁有一個“基礎”資源“用戶”,在此基礎上您可以為不同的“用戶資源”構建多個URI。 例如,您可以定義名為“loginstatus”的用戶資源:
/users/{username}/loginstatus
- 此資源允許指定/檢索當前用戶的“登錄狀態” 要定義登錄或注銷“操作”,您可以使用(在此方法中)“查詢參數”:
POST /users/{username}/loginstatus?action=login&password=userPassword
POST /users/{username}/loginstatus?action=logout&password=userPassword
所以,基本上我們創建一個名為“loginstatus”的“資源”,它允許對它執行不同的操作......你不應該有一個名為“登錄”的資源,即“動作”或“動詞”。 POST
應該用於登錄/退出而不是GET
,因為您不僅要檢索資源,而且實際上是在對資源進行更改(登錄或注銷,這會更改用戶“loginstatus”資源 -通常是用戶身份驗證DB中的條目。
您可以通過以下方式實現此目的:
@Path("/users")
public class GenericResource {
@POST
@Path{/{username}/loginstatus
@Produces("text/html")
public String SignIn(@PathParam("username") String username,
@QueryParam("password") String password,
@QueryParam("action") String action) {
// if action = "login" => perform login
// if action = "logout" => perform logout
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.