Author: asoldano
Date: 2014-06-03 05:12:40 -0400 (Tue, 03 Jun 2014)
New Revision: 18710
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/HandlerAuthInterceptor.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/HandlerAuthTestCase.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/LogicalSimpleHandler.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpoint.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl2.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl3.java
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SimpleHandler.java
Log:
More on JBWS-3378
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/HandlerAuthInterceptor.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/HandlerAuthInterceptor.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/HandlerAuthInterceptor.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -1,6 +1,6 @@
/*
* JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2014, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
@@ -58,6 +58,8 @@
*/
public class HandlerAuthInterceptor extends AbstractPhaseInterceptor<Message>
{
+ private static final String KEY = HandlerAuthInterceptor.class.getName() +
".SECURITY_EXCEPTION";
+
public HandlerAuthInterceptor()
{
super(Phase.PRE_PROTOCOL_FRONTEND);
@@ -111,7 +113,25 @@
checkAuthorization(context);
return super.invokeProtocolHandlers(requestor, context);
}
+
+ @Override
+ public boolean invokeLogicalHandlersHandleFault(boolean requestor,
LogicalMessageContext context)
+ {
+ if (context.containsKey(KEY)) {
+ return true;
+ }
+ return super.invokeLogicalHandlersHandleFault(requestor, context);
+ }
+ @Override
+ public boolean invokeProtocolHandlersHandleFault(boolean requestor, MessageContext
context)
+ {
+ if (context.containsKey(KEY)) {
+ return true;
+ }
+ return super.invokeProtocolHandlersHandleFault(requestor, context);
+ }
+
protected void checkAuthorization(MessageContext ctx)
{
if ((Boolean) ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))
@@ -149,6 +169,7 @@
}
}
final Principal p = secCtx.getUserPrincipal();
+ ctx.put(KEY, true);
throw MESSAGES.authorizationFailed(p != null ? p.getName() : null);
}
}
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/HandlerAuthTestCase.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/HandlerAuthTestCase.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/HandlerAuthTestCase.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -74,31 +74,43 @@
SecureEndpoint port = service.getPort(new QName("http://ws/",
"SecureEndpoint3Port"), SecureEndpoint.class);
setUser((BindingProvider)port, "John", "foo");
int count = port.getHandlerCounter();
+ int countOut = port.getHandlerCounterOutbound();
int newCount;
+ int newCountOut;
assertEquals("Hello, Mr. John", port.sayHello("John"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
assertEquals("Bye, Mr. John", port.sayBye("John"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
try {
port.deniedMethod();
fail("Exception expected!");
} catch (Exception e) {
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount); //verify count is increased
+ assertEquals(++countOut, newCountOut); //verify countOut is increased
}
port.ping();
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(countOut, newCountOut); //verify countOut is not increased (oneway)
assertEquals("foo", port.echo("foo"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
//Change user...
@@ -106,14 +118,18 @@
assertEquals("Hello, Mr. Bob", port.sayHello("Bob"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
try {
port.sayBye("Bob");
fail("Exception expected!");
} catch (Exception e) {
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount); //verify count is increased
+ assertEquals(++countOut, newCountOut); //verify countOut is increased
}
try {
@@ -121,27 +137,37 @@
fail("Exception expected!");
} catch (Exception e) {
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount); //verify count is increased
+ assertEquals(++countOut, newCountOut); //verify countOut is increased
}
assertEquals("foo2", port.echo("foo2"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
}
private void testAuth(final SecureEndpoint port) throws Exception
{
setUser((BindingProvider)port, "John", "foo");
int count = port.getHandlerCounter();
+ int countOut = port.getHandlerCounterOutbound();
int newCount;
+ int newCountOut;
assertEquals("Hello, Mr. John", port.sayHello("John"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
assertEquals("Bye, Mr. John", port.sayBye("John"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
try {
port.deniedMethod();
@@ -149,16 +175,22 @@
} catch (Exception e) {
assertTrue(e.getMessage().contains("JBWS024094"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(count, newCount); //verify count is *not* increased
+ assertEquals(countOut, newCountOut); //verify countOut is *not* increased
}
port.ping();
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(countOut, newCountOut); //verify countOut is *not* increased (oneway)
assertEquals("foo", port.echo("foo"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
//Change user...
@@ -166,7 +198,9 @@
assertEquals("Hello, Mr. Bob", port.sayHello("Bob"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
try {
port.sayBye("Bob");
@@ -174,7 +208,9 @@
} catch (Exception e) {
assertTrue(e.getMessage().contains("JBWS024094"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(count, newCount); //verify count is *not* increased
+ assertEquals(countOut, newCountOut); //verify countOut is *not* increased
}
try {
@@ -183,7 +219,9 @@
} catch (Exception e) {
assertTrue(e.getMessage().contains("JBWS024094"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(count, newCount); //verify count is *not* increased
+ assertEquals(countOut, newCountOut); //verify countOut is *not* increased
}
try {
@@ -191,12 +229,16 @@
} catch (Exception e) {
assertTrue(e.getMessage().contains("JBWS024094"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(count, newCount); //verify count is *not* increased
+ assertEquals(countOut, newCountOut); //verify countOut is *not* increased
(it's oneway anyway)
}
assertEquals("foo2", port.echo("foo2"));
newCount = port.getHandlerCounter();
+ newCountOut = port.getHandlerCounterOutbound();
assertEquals(++count, newCount);
+ assertEquals(++countOut, newCountOut);
}
private static void setUser(BindingProvider bp, String username, String password) {
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/LogicalSimpleHandler.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/LogicalSimpleHandler.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/LogicalSimpleHandler.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -31,14 +31,17 @@
public class LogicalSimpleHandler implements LogicalHandler<LogicalMessageContext>
{
public static AtomicInteger counter = new AtomicInteger(0);
+ public static AtomicInteger outboundCounter = new AtomicInteger(0);
@Override
public boolean handleMessage(LogicalMessageContext context)
{
Boolean isOutbound = (Boolean)
context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
String operation = ((QName)
context.get(MessageContext.WSDL_OPERATION)).getLocalPart();
- if (!isOutbound && !operation.equals("getHandlerCounter")) {
+ if (!isOutbound && !operation.startsWith("getHandlerCounter")) {
counter.incrementAndGet();
+ } else if (isOutbound &&
!operation.startsWith("getHandlerCounter")) {
+ outboundCounter.incrementAndGet();
}
return true;
}
@@ -46,6 +49,10 @@
@Override
public boolean handleFault(LogicalMessageContext context)
{
+ String operation = ((QName)
context.get(MessageContext.WSDL_OPERATION)).getLocalPart();
+ if (!operation.startsWith("getHandlerCounter")) {
+ outboundCounter.incrementAndGet();
+ }
return true;
}
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpoint.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpoint.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpoint.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -33,6 +33,8 @@
int getHandlerCounter();
+ int getHandlerCounterOutbound();
+
@Oneway
void ping();
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -77,8 +77,11 @@
public int getHandlerCounter() {
return SimpleHandler.counter.get();
}
+
+ public int getHandlerCounterOutbound() {
+ return SimpleHandler.outboundCounter.get();
+ }
-
@Oneway
@RolesAllowed("friend")
public void ping() {
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl2.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl2.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl2.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -78,6 +78,9 @@
return LogicalSimpleHandler.counter.get();
}
+ public int getHandlerCounterOutbound() {
+ return LogicalSimpleHandler.outboundCounter.get();
+ }
@Oneway
@RolesAllowed("friend")
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl3.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl3.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SecureEndpointImpl3.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -78,6 +78,9 @@
return SimpleHandler.counter.get();
}
+ public int getHandlerCounterOutbound() {
+ return SimpleHandler.outboundCounter.get();
+ }
@Oneway
@RolesAllowed("friend")
Modified:
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SimpleHandler.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SimpleHandler.java 2014-06-02
16:53:14 UTC (rev 18709)
+++
stack/cxf/trunk/modules/testsuite/shared-tests/src/test/java/org/jboss/test/ws/jaxws/handlerauth/SimpleHandler.java 2014-06-03
09:12:40 UTC (rev 18710)
@@ -32,14 +32,17 @@
public class SimpleHandler implements SOAPHandler<SOAPMessageContext>
{
public static AtomicInteger counter = new AtomicInteger(0);
+ public static AtomicInteger outboundCounter = new AtomicInteger(0);
@Override
public boolean handleMessage(SOAPMessageContext context)
{
Boolean isOutbound = (Boolean)
context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
String operation = ((QName)
context.get(MessageContext.WSDL_OPERATION)).getLocalPart();
- if (!isOutbound && !operation.equals("getHandlerCounter")) {
+ if (!isOutbound && !operation.startsWith("getHandlerCounter")) {
counter.incrementAndGet();
+ } else if (isOutbound &&
!operation.startsWith("getHandlerCounter")) {
+ outboundCounter.incrementAndGet();
}
return true;
}
@@ -47,6 +50,10 @@
@Override
public boolean handleFault(SOAPMessageContext context)
{
+ String operation = ((QName)
context.get(MessageContext.WSDL_OPERATION)).getLocalPart();
+ if (!operation.startsWith("getHandlerCounter")) {
+ outboundCounter.incrementAndGet();
+ }
return true;
}