今天我看到了下一个代码:
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...
我知道这段代码在做什么,基本上第一次添加一个标签时,它会在运行时更改以实现SecurizedComponent接口。 但我的问题是:这是一个好习惯吗?有没有更好的方法来实现它?
答案 0 :(得分:0)
这真的不会让我感到震惊。我会将检查if (!(addedTab instanceof SecurizedComponent)) {
放在SecurityWrapper中,因此您无法在代码中的任何位置进行检查,并且使用安全对象调用SecurityWrapper将不会执行任何操作。
否则,我会使用带有isSecured()方法的Securizable接口,所有实现都将返回false,直到SecurityWrapper发挥其魔力。
当然"安全"只有你的代码安全,因为我支持你可以改变你的类来实现Securized并绕过检查......