2011-03-03 20 views
1

私はこの出力を生成するWebサービス(と思う)作成しました:以下Webサービスを保護する方法は?

[{"MANAGER_ID":0,"DEPARTMENT_ID":90,"SALARY":24000,"HIRE_DATE":"1987-06-17","FIRST_NAME":"Steven","COMMISSION_PCT":0,"EMAIL":"SKING","EMPLOYEE_ID":100,"JOB_ID":"AD_PRES","PHONE_NUMBER":"515.123.4567","LAST_NAME":"King"}] 

は私のコードです:私はANを追加したい場合、私はこれを確保することができます

package resource; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.naming.NamingException; 
import javax.sql.DataSource; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

@Path("hr") 
public class HumanResources { 
    @SuppressWarnings("unused") 
    @Context 
    private UriInfo context; 

    /** 
    * Default constructor. 
    */ 
    public HumanResources() { 
    // TODO Auto-generated constructor stub 
    } 

    /** 
    * Retrieves representation of an instance of HumanResources 
    * @return an instance of String 
    * @throws NamingException 
    * @throws SQLException 
    */ 
    @GET 
    @Produces("application/json") 
    public String getText() throws JSONException, NamingException, SQLException { 
    // TODO return proper representation object 
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr"); 
    Statement sel = conn.createStatement(); 
    ResultSet rs = sel.executeQuery("select * from employees where rownum <= 5"); 

    JSONObject employees = new JSONObject(); 
    JSONArray emp = new JSONArray(); 

    while (rs.next()) { 
     JSONObject employee = new JSONObject(); 
     employee.put("EMPLOYEE_ID", rs.getInt("EMPLOYEE_ID")); 
     employee.put("FIRST_NAME", rs.getString("FIRST_NAME")); 
     employee.put("LAST_NAME", rs.getString("LAST_NAME")); 
     employee.put("EMAIL", rs.getString("EMAIL")); 
     employee.put("PHONE_NUMBER", rs.getString("PHONE_NUMBER")); 
     employee.put("HIRE_DATE", rs.getDate("HIRE_DATE")); 
     employee.put("JOB_ID", rs.getString("JOB_ID")); 
     employee.put("SALARY", rs.getDouble("SALARY")); 
     employee.put("COMMISSION_PCT", rs.getDouble("COMMISSION_PCT")); 
     employee.put("MANAGER_ID", rs.getInt("MANAGER_ID")); 
     employee.put("DEPARTMENT_ID", rs.getInt("DEPARTMENT_ID")); 
     emp.put(employee); 
    } 

    employees.put("EMPLOYEES", emp); 

    sel.close(); 
    return emp.toString(); 
    } 

    /** 
    * PUT method for updating or creating an instance of HumanResources 
    * @param content representation for the resource 
    * @return an HTTP response with content of the updated or created resource. 
    */ 
    @PUT 
    @Consumes("text/plain") 
    public void putText(String content) { 
    } 

} 

どのような方法でデータにアクセスする前に認証方式?私の他のシステムでは、ユーザー名とパスワードを受け取り、有効な場合はtrueを返し、そうでない場合はfalseを返すデータベースレベル(oracle)の関数を作成しました。私はこれを使うことができますか別の方法で行う必要がありますか?

は助けに感謝します。

ありがとうございました。

答えて

3

ユーザー認証を扱う新しいwebserviceメソッドを作成します。与えられたユーザーとパスワードは、Webサービスへの後続の呼び出しに渡す必要がある一意のセッショントークンを返します。

例:

  1. Authentication(String userName, String userPassword)メソッドを呼び出します。
  2. このメソッドは、その処理を行い、ユーザーが認証されているかどうかを確認します。
  3. このメソッドは、ユーザーに一意のセッション文字列を返します(メソッドはデータベースにも保存されます)。
  4. SomeOtherMethod(String articleCode, Int articleQuantity, Single articlePrice, String autheticationToken)メソッドを呼び出します。
  5. このメソッドは、指定されたauthenticationTokenがデータベースに存在し、期限切れでないかどうかをチェックします。
+0

こんにちは、 返信ありがとうございます。いくつかのことを確認したかった _ Authentication(String userName、String userPassword)メソッドを呼び出します。 私のHumanResourcesクラス内にこの認証関数を追加する必要がありますか? _メソッドはユーザーに一意のセッション文字列を返します(このメソッドはデータベースにも保存されます)._ 基本的には、固有のセッション文字列を生成し、作成するテーブルに保存するプロシージャを作成する必要がありますすなわち、 user_sessions? – adshocker

+0

_ "このメソッドは、指定されたauthenticationTokenがデータベース内にあり、期限切れではないかどうかを確認します。" _ - これはHumanResourcesクラスにも存在する必要がありますか? – adshocker

+0

'Authentication'と' CheckToken'(あなたが望むように名前を付けることができます)はどこにでも置くことができます。特定のクラス(ヘルパーメソッド)に束縛されているわけではないので、それらを 'Utilities'静的クラスなどに配置します。あなたが持っているWebMethodごとに呼び出すことができます。 – Albireo

関連する問題