Отключите отражение Java для текущего потока

Используйте ref для сохранения значений между вызовами функций без запуска рендера

class ClassExample extends React.Component {
  _isAnimating = false;
  _blockRef = null;
  
  onBlockRef = (ref) => {
    if (ref) {
      this._blockRef = ref;
    }
  }
  
  // Animate the block.
  onClick = () => {
    if (this._isAnimating) {
      return;
    }

    this._isAnimating = true;
    Velocity(this._blockRef, {
      translateX: 500,
      complete: () => {
        Velocity(this._blockRef, {
          translateX: 0,
          complete: () => {
            this._isAnimating = false;
          }
        },
        {
          duration: 1000
        });
      }
    },
    {
      duration: 1000
    });
  };
  
  render() {
    console.log("Rendering ClassExample");
    return(
      
{}
); } } const FunctionExample = (props) => { console.log("Rendering FunctionExample"); const isAnimating = React.useRef(false) const blockRef = React.useRef(null); // Animate the block. const onClick = React.useCallback(() => { if (isAnimating.current) { return; } isAnimating.current = true Velocity(blockRef.current, { translateX: 500, complete: () => { Velocity(blockRef.current, { translateX: 0, complete: () => { isAnimating.current = false } }, { duration: 1000 }); } }, { duration: 1000 }); }); return(
{}
); }; ReactDOM.render(
, document.getElementById('root'));






20
задан Community 23 May 2017 в 12:33
поделиться

3 ответа

Ну, вы можете переопределить SecurityManager.checkMemberAccess и дать более строгое определение. Однако на самом деле это не так. Что происходит, например, если код определяет финализатор?

Пояснение: другие API используют рефлексию и другие API. Например, java.beans, LiveConnect и Rhino. Например, злоумышленник из сценария может создать новый контекст Rhino без затвора и, таким образом, загрузить его в полную версию JRE. С открытой системой черный список никогда не может быть закончен.

В итоге: для использования модели безопасности Java вам нужно работать с ней, а не с ней.

4
ответ дан 30 November 2019 в 00:55
поделиться

Это зависит от того, что вы пытаетесь ограничить.

В общем, общедоступный API не ограничен. Однако, если вы не предоставите ненадежному коду разрешение ReflectPermission ("suppressAccessChecks") , оно не сможет получить доступ к непубличному API в другом пакете.

Если у вас есть список пакетов, к которым вы хотите ограничить весь доступ, есть два шага. Во-первых, в свойствах Security включите ограниченный пакет в список package.access . Затем передайте свой доверенный код RuntimePermission ("accessClassInPackage." + Pkg) .

Распространенный способ отличить ненадежный код - загрузить его из другого места, и при предоставлении разрешений обращайтесь к различным кодовым базам в файле политики.

Архитектура безопасности Java очень мощная, но я знаю, что она также сложна; если вам нужен более конкретный пример, пожалуйста, опишите, какие именно вызовы вы хотите ограничить, и я постараюсь быть более точным.


Делать то, что вы хотите, без изменения файла java.policy и / или файл java.security будет очень сложным, возможно, невозможным. java.security.Policy представляет информацию в java.policy , но не предлагает доступа для записи. Вы можете создать свою собственную реализацию Policy и установить ее во время выполнения, если это позволяет любой существующий SecurityManager .

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

19
ответ дан 30 November 2019 в 00:55
поделиться

Я написал замену ClassShutter, которая позволяет мелкозернистый контроль доступа, на экземпляр, на метод, на поле:

http://riven8192.blogspot.com/2010/07/java-rhino-fine-grained-classshutter.html

2
ответ дан 30 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

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