Skip to content

Commit fe85e71

Browse files
committed
Added JASPIC test for request/response wrapping in filters
1 parent dd025f3 commit fe85e71

File tree

5 files changed

+137
-5
lines changed

5 files changed

+137
-5
lines changed

jaspic/wrapping/src/main/java/org/javaee7/jaspic/wrapping/sam/SamAutoRegistrationListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package org.javaee7.jaspic.wrapping.sam;
22

3+
import static java.util.EnumSet.allOf;
4+
5+
import javax.servlet.DispatcherType;
36
import javax.servlet.ServletContextEvent;
47
import javax.servlet.annotation.WebListener;
58

69
import org.javaee7.jaspic.common.BaseServletContextListener;
710
import org.javaee7.jaspic.common.JaspicUtils;
11+
import org.javaee7.jaspic.wrapping.servlet.ProgrammaticFilter;
812

913
/**
1014
*
@@ -17,6 +21,10 @@ public class SamAutoRegistrationListener extends BaseServletContextListener {
1721
@Override
1822
public void contextInitialized(ServletContextEvent sce) {
1923
JaspicUtils.registerSAM(sce.getServletContext(), new TestWrappingServerAuthModule());
24+
25+
sce.getServletContext()
26+
.addFilter("Programmatic filter", ProgrammaticFilter.class)
27+
.addMappingForUrlPatterns(allOf(DispatcherType.class), false, "/*");
2028
}
2129

2230
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.javaee7.jaspic.wrapping.servlet;
2+
3+
import java.io.IOException;
4+
import java.io.Writer;
5+
6+
import javax.servlet.Filter;
7+
import javax.servlet.FilterChain;
8+
import javax.servlet.FilterConfig;
9+
import javax.servlet.ServletException;
10+
import javax.servlet.ServletRequest;
11+
import javax.servlet.ServletResponse;
12+
import javax.servlet.annotation.WebFilter;
13+
import javax.servlet.http.HttpServletResponse;
14+
15+
/**
16+
* This Filter tests that the request and response objects it receives are the ones marked as wrapped by the SAM that executed
17+
* before the Servlet was called.
18+
*
19+
* @author Arjan Tijms
20+
*
21+
*/
22+
@WebFilter(urlPatterns="/*")
23+
public class DeclaredFilter implements Filter {
24+
25+
public void init(FilterConfig fConfig) throws ServletException {
26+
}
27+
28+
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
29+
30+
Writer writer = response.getWriter();
31+
32+
writer.write("declared filter request isWrapped: " + request.getAttribute("isWrapped"));
33+
writer.write("\n");
34+
writer.write("declared filter response isWrapped: " + ((HttpServletResponse)response).getHeader("isWrapped"));
35+
writer.write("\n");
36+
37+
chain.doFilter(request, response);
38+
}
39+
40+
public void destroy() {
41+
}
42+
43+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.javaee7.jaspic.wrapping.servlet;
2+
3+
import java.io.IOException;
4+
import java.io.Writer;
5+
6+
import javax.servlet.Filter;
7+
import javax.servlet.FilterChain;
8+
import javax.servlet.FilterConfig;
9+
import javax.servlet.ServletException;
10+
import javax.servlet.ServletRequest;
11+
import javax.servlet.ServletResponse;
12+
import javax.servlet.http.HttpServletResponse;
13+
14+
/**
15+
* This Filter tests that the request and response objects it receives are the ones marked as wrapped by the SAM that executed
16+
* before the Servlet was called.
17+
*
18+
* @author Arjan Tijms
19+
*
20+
*/
21+
public class ProgrammaticFilter implements Filter {
22+
23+
public void init(FilterConfig fConfig) throws ServletException {
24+
}
25+
26+
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
27+
28+
Writer writer = response.getWriter();
29+
30+
writer.write("programmatic filter request isWrapped: " + request.getAttribute("isWrapped"));
31+
writer.write("\n");
32+
writer.write("programmatic filter response isWrapped: " + ((HttpServletResponse)response).getHeader("isWrapped"));
33+
writer.write("\n");
34+
35+
chain.doFilter(request, response);
36+
}
37+
38+
public void destroy() {
39+
}
40+
41+
}

jaspic/wrapping/src/main/java/org/javaee7/jaspic/wrapping/servlet/ProtectedServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
2626

2727
Writer writer = response.getWriter();
2828

29-
writer.write("request isWrapped: " + request.getAttribute("isWrapped"));
29+
writer.write("servlet request isWrapped: " + request.getAttribute("isWrapped"));
3030
writer.write("\n");
31-
writer.write("response isWrapped: " + response.getHeader("isWrapped"));
31+
writer.write("servlet response isWrapped: " + response.getHeader("isWrapped"));
3232
}
3333

3434
}

jaspic/wrapping/src/test/java/org/javaee7/jaspic/wrapping/WrappingTest.java

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
/**
1616
* This tests that the wrapped request and response a SAM puts into the MessageInfo structure reaches the Servlet that's
17-
* invoked.
17+
* invoked as well as all filters executed before that.
1818
*
1919
* @author Arjan Tijms
2020
*
@@ -26,6 +26,46 @@ public class WrappingTest extends ArquillianBase {
2626
public static Archive<?> createDeployment() {
2727
return defaultArchive();
2828
}
29+
30+
@Test
31+
public void testProgrammaticFilterRequestWrapping() throws IOException, SAXException {
32+
33+
String response = getFromServerPath("protected/servlet");
34+
35+
// The SAM wrapped a request so that it always contains the request attribute "isWrapped" with value true.
36+
assertTrue("Request wrapped by SAM did not arrive in programmatic Filter.",
37+
response.contains("programmatic filter request isWrapped: true"));
38+
}
39+
40+
@Test
41+
public void testProgrammaticFilterResponseWrapping() throws IOException, SAXException {
42+
43+
String response = getFromServerPath("protected/servlet");
44+
45+
// The SAM wrapped a response so that it always contains the header "isWrapped" with value true.
46+
assertTrue("Response wrapped by SAM did not arrive in programmatic Filter.",
47+
response.contains("programmatic filter response isWrapped: true"));
48+
}
49+
50+
@Test
51+
public void testDeclaredFilterRequestWrapping() throws IOException, SAXException {
52+
53+
String response = getFromServerPath("protected/servlet");
54+
55+
// The SAM wrapped a request so that it always contains the request attribute "isWrapped" with value true.
56+
assertTrue("Request wrapped by SAM did not arrive in declared Filter.",
57+
response.contains("declared filter request isWrapped: true"));
58+
}
59+
60+
@Test
61+
public void testDeclaredFilterResponseWrapping() throws IOException, SAXException {
62+
63+
String response = getFromServerPath("protected/servlet");
64+
65+
// The SAM wrapped a response so that it always contains the header "isWrapped" with value true.
66+
assertTrue("Response wrapped by SAM did not arrive in declared Filter.",
67+
response.contains("declared filter response isWrapped: true"));
68+
}
2969

3070
@Test
3171
public void testRequestWrapping() throws IOException, SAXException {
@@ -34,7 +74,7 @@ public void testRequestWrapping() throws IOException, SAXException {
3474

3575
// The SAM wrapped a request so that it always contains the request attribute "isWrapped" with value true.
3676
assertTrue("Request wrapped by SAM did not arrive in Servlet.",
37-
response.contains("request isWrapped: true"));
77+
response.contains("servlet request isWrapped: true"));
3878
}
3979

4080
@Test
@@ -44,7 +84,7 @@ public void testResponseWrapping() throws IOException, SAXException {
4484

4585
// The SAM wrapped a response so that it always contains the header "isWrapped" with value true.
4686
assertTrue("Response wrapped by SAM did not arrive in Servlet.",
47-
response.contains("response isWrapped: true"));
87+
response.contains("servlet response isWrapped: true"));
4888
}
4989

5090
}

0 commit comments

Comments
 (0)