2011-03-03 4 views
1

j'ai créé un service Web (je pense) qui produit cette sortie:comment sécuriser le service 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"}] 

ci-dessous est mon code:

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) { 
    } 

} 

de quelle manière puis-je obtenir cela si je voulais ajouter un schéma d'authentification avant d'accéder aux données? Dans mon autre système, j'ai créé une fonction au niveau de la base de données (Oracle) qui accepte un nom d'utilisateur et un mot de passe et renvoie soit vrai si valide et faux sinon. puis-je l'utiliser ou dois-je le faire d'une autre manière?

apprécier toute aide.

merci.

Répondre

3

Créer une nouvelle méthode webservice qui traite de l'authentification de l'utilisateur, étant donné que l'utilisateur et le mot de passe renvoie un jeton de session unique qui doit être passé à tout appel ultérieur au service web, vous pouvez vérifier la validité du jeton reçu.

Un exemple:

  1. Appelez la méthode Authentication(String userName, String userPassword).
  2. La méthode fait ses choses et vérifie si l'utilisateur est authentifié.
  3. La méthode renvoie à l'utilisateur une chaîne de session unique (la méthode l'enregistre également dans une base de données).
  4. Appelez la méthode SomeOtherMethod(String articleCode, Int articleQuantity, Single articlePrice, String autheticationToken).
  5. La méthode vérifie si le authenticationToken fourni peut être trouvé dans la base de données et n'a pas expiré.
+0

salut, merci pour la réponse. voulait confirmer quelques choses. _Appelez la méthode Authentification (String userName, String userPassword). _ Devrais-je ajouter cette fonction d'authentification dans ma classe HumanResources? _La méthode renvoie à l'utilisateur une chaîne de session unique (la méthode l'enregistre également dans une base de données) ._ Donc, fondamentalement, je vais devoir créer une procédure qui génère une chaîne de session unique puis l'enregistre dans une table que je vais créer c'est à dire. user_sessions? – adshocker

+0

_ "La méthode vérifie si le message d'authentification fourni peut être trouvé dans la base de données et n'a pas expiré." _ - devrait-il aussi figurer dans la classe HumanResources? – adshocker

+0

Les 'Authentication' et' CheckToken' (vous pouvez les nommer comme vous le souhaitez) peuvent être placés n'importe où; comme ils ne sont pas liés à une classe spécifique (ce sont des méthodes auxiliaires) je les placerais dans une classe statique 'Utilities' ou quelque chose comme ça, assurez-vous simplement qu'ils peuvent être appelés depuis chaque WebMethod que vous avez. – Albireo

Questions connexes