On 12/18/2013 12:05 PM, Daniel Fuchs wrote:
But then we have another problem with doPrivileged approach, since it is
even more restrictive than 'sealed' field approach. Currently the
Handler's subclass that overrides a setter and calls super, works:


@Override
public void setOutputStream(OutputStream out) {
     super.setOutputStream(out);
}


With doPrivileged wrapping setOutputStream in the superclass
constructor, it will throw SecurityException if the subclass protection
domain does not have the "control" permission...

Can this break custom handlers in some environment?

Good question. It may yes - but on the other hand, a subclass of
handler that override such methods and call the super.method would
*need* to have the control permission too - wouldn't it?

Otherwise calling these methods when sealed is back to true would
always fail...

There might be no need to call the overridden setters after the Handler instance is constructed. Apart from "setLevel", Handler setters are only called by Handlers themselves in construction phase and by user code... If user code doesn't need to call the overridden setters after handlers are constructed, user code doesn't need the "control" permission.

But than again, user would *need* to have "control" permission anyway to make use of a newly constructed Handler. If all she can do is instantiate new Handler instances and not add them to Loggers, what good does it make?

Regards, Peter


best regards,

-- daniel

Reply via email to