簡體   English   中英

如何從單個Web服務類調用不同的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM