как обезопасить веб-сервис? - PullRequest
1 голос
/ 03 марта 2011

Я создал веб-сервис (я думаю), который производит такой вывод:

[{"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"}]

ниже мой код:

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, если нет. Могу ли я использовать это или мне нужно сделать это по-другому?

ценю любую помощь.

спасибо.

1 Ответ

3 голосов
/ 03 марта 2011

Создайте новый метод веб-сервиса, который имеет дело с аутентификацией пользователя, при условии, что пользователь и пароль возвращают уникальный токен сеанса, который должен быть передан при каждом последующем обращении к веб-сервису, затем вы можете проверить полученный токен на действительность.

Пример:

  1. Вызовите метод Authentication(String userName, String userPassword).
  2. Метод выполняет свои функции и проверяет, аутентифицирован ли пользователь.
  3. Метод возвращает пользователю уникальную строку сеанса (метод также сохраняет ее в базе данных).
  4. вызов SomeOtherMethod(String articleCode, Int articleQuantity, Single articlePrice, String autheticationToken) метод.
  5. Метод проверки, если указанный authenticationToken может быть найден в базе данных и срок его действия не истек.
...