Будьте в спящем режиме полиморфизм: инстанцирование правильного класса

Обычно вредоносные сайты используют так называемые Drive-by Downloads , чтобы вы могли загрузить свои эксплойты в вашу систему. С этого момента они часто используют удаленное выполнение кода для чтения и записи данных с вашего ПК. Это может быть в случае с вами.

Проверка файла

Поскольку он загружал только файл .JS, вы можете безопасно проверить его с помощью текстового редактора в вашей текущей системе. Вы также можете попытаться найти эксплойт, который использовал ту же технику, в Exploit-DB или выполнить поиск соответствующего кода в Google. Хотя лучше всего было бы использовать hexdump на виртуальной машине и попытаться выполнить обратный инжиниринг, чтобы увидеть, что он делает, если вы не можете найти больше информации о коде.

Забрать

  • Никогда не предоставляйте вредоносному веб-сайту доступ к файлам и привилегиям, которые они могут использовать
  • Никогда не позволяйте вредоносному веб-сайту загрузить файл для вас.

7
задан Boden 16 April 2009 в 20:17
поделиться

3 ответа

I apologize again for this question. I'm very surprised at how hibernate works, it's really cool. I didn't think it would do all of this automagically, and I really wasn't even sure what I was trying to ask. As I responded to comments I started to refine the question in my head and was able to then find the answer I was looking for. Thanks to everyone who helped.

The answer is: hibernate does this automatically.

Suppose you have in your database table A with a primary key "id", and a table B that has a primary key called "a_id" that references table A.

So you create the following classes (abbreviated):

public class A {
  private String aProperty;
  // ... getter and setter, etc
{

public class B extends A {
  private String bProperty;
  // ... getter and setter, etc
}

Then map them like so:

<hibernate-mapping>
    <class name="A" table="a" catalog="testokdelete">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="aProperty" column="a_property"/>
        <joined-subclass name="B" table="b">
            <key column="a_id"/>
            <property name="bProperty" column="b_property"/>
        </joined-subclass>
    </class>
</hibernate-mapping>

And you can return A and B objects using a simple "from A" query, as in the following code:

Query query = session.createQuery("from A");
List<Object> objects = query.list();
for (Object object: objects) {
    System.out.print("A property: ");
    System.out.print(((A)object).getAProperty());
    System.out.print(", B property: ");
    System.out.println( (object.getClass() == B.class) ? ((B)object).getBProperty() : "not a B");
}

All it does is return a list of objects using the query "from A", and then walks through them printing out aProperty from our A class and, if the class is of type B, the bProperty from our B class.

The hibernate query in this case is automatically polymorphic and will give you a B object when appropriate.

6
ответ дан 7 December 2019 в 03:21
поделиться

Вы можете использовать RTTI с instanceof, но это не объектно-ориентированное.

Вместо этого укажите базовый класс, A метод, который относится к каким дополнительным a B соответствует, например, если A является Заказчиком и B является PreferredCustomer , способ может быть isPreferredCustomer () .

В A метод возвращает false, в B он возвращает true.

Важно отметить, что мы не спрашивать, принадлежит ли объект определенному классу; мы задаем бизнес-вопрос, спрашиваем объект, может ли он что-то сделать. Это тонкое, но важное различие.

В частности, это означает, что ваш код ниже выиграл

2
ответ дан 7 December 2019 в 03:21
поделиться

Хорошо, хорошо, я собираюсь предположить, что ваши классы отображаются правильно. Я думаю, что если вы сделали это, то сможете сделать следующее:

public List<A> getAllClassA(){
      Session session = HibernateUtil.getSession();
      Criteria criteria = session.createCriteria(A.class);

      List<A> ret = criteria.list();

      return ret;
}

Если вы не знакомы с критериями, это довольно просто подобрать. Этот фрагмент кода извлечет все объекты класса A из базы данных. Если вы правильно настроили карту, я думаю, что Hibernate также будет поддерживать атрибуты B ваших объектов A, если они на самом деле являются объектами B (извините, если это сбивает с толку).

Дайте мне знать, если это вы искали или если вам нужен код для HibernateUtil.

1
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: