Paul Thompson created HTTPCORE-517:
--------------------------------------

             Summary: Allow SecurityManager to stop socket connections
                 Key: HTTPCORE-517
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-517
             Project: HttpComponents HttpCore
          Issue Type: Improvement
            Reporter: Paul Thompson


Utilising a java security manager you're able to block certain socket 
connections from taking place. This can be useful to block outgoing connections 
for all components.
{code:java}
@Override
public void checkConnect(String host, int port) {
    if(port != -1) {
        for (String bannedPerm : bannedSocketPerms) {
            if (host.equalsIgnoreCase(bannedPerm)) {
                throw new new SecurityException();
            }
        }
    }
}{code}
Unfortunately when doing this, the apache reactor shuts down. The call site is 
in the {{DefaultConnectingIOReactor}}. 
{code:java}
final boolean connected = socketChannel.connect(request.getRemoteAddress());
{code}
this line is wrapped in a try/catch that catches an {{IOException}}. This means 
the {{SecurityException}} is propagated out, and is never offered to be caught 
(even with the {{ExceptionHandler}} that you can set. 

It would be an improvement to be able to throw these types of exceptions and 
have the reactor continue on. It's very understandable for the 
{{SecurityException}} to be a transient error and as such shouldn't shut down 
the entire reactor by default.

Either that, or one should be able to define a {{handleRuntimeException}} (as 
seen in the {{BaseIOREactor}}) in such a way that it would get the option to 
handle the exceptions that are thrown as part of the {{processEvents}} call in 
the {{AbstractIOReactor}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to