2015-04-22 6 views
0

Сегодня я увидел следующий код:Изменения во время выполнения на интерфейс маркеров

public Tab addTab(Component c, String caption, Resource icon, int position) { 
    Tab addedTab = super.addTab(c, i18nCaption, icon, position); 
    // if is not securized 
    if (!(addedTab instanceof SecurizedComponent)) { 
     addedTab = SecurityWrapper.createSecurityWrapper((TabSheetTabImpl)addedTab, caption); 
    } 
    return addedTab; 
} 

SecurizedComponent является интерфейсом маркеров

/** 
* 
* This is a marker interface. All securized components will be changed at runtime to implement this interface. 
* This way, is possible to know if a component has been securized asking for component instanceof SecurizedComponent 
* 
* Allows the framework not to securize components more than once 
* 
*/ 
    public interface SecurizedComponent { 

    } 

Метод createSecurityWrapper сделать что-то вроде:

Enhancer enhancer = new Enhancer(); 
    enhancer.setSuperclass(wrapperClass); 
    enhancer.setClassLoader(source.getClass().getClassLoader()); 
    enhancer.setInterfaces(new Class[]{SecurizedComponent.class}); 

    //more stuff... 

Я знаю, что делает этот код, в основном, когда вкладка добавлена ​​в первый раз, она изменяется во время выполнения до i Дополнить интерфейс SecurizedComponent. Но мой вопрос: это хорошая практика? Есть ли лучший способ его реализовать?

ответ

0

Это меня не шокирует. Я бы поставил чек if (!(addedTab instanceof SecurizedComponent)) { внутри SecurityWrapper, поэтому вы не будете иметь эту проверку повсюду в своем коде, а вызов SecurityWrapper с сохраненным объектом ничего не сделает.

В противном случае я бы использовал интерфейс Securizable с методом isSecured(), все реализации вернут false до тех пор, пока SecurityWrapper не выполнит свою магию.

Разумеется, что «Безопасность» безопасна только как ваш код, так как я поддерживаю вас, вы можете изменить свой класс для реализации Securized и обходить проверки ...

Смежные вопросы