Skip to content

Commit 6a22709

Browse files
committed
Added JASPIC tests that test whether a SAM can forward and include
several kinds of resources
1 parent f9fdd13 commit 6a22709

39 files changed

+1099
-6
lines changed

jaspic/common/src/main/java/org/javaee7/jaspic/common/ArquillianBase.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,22 @@ public class ArquillianBase {
2626

2727
private static final String WEBAPP_SRC = "src/main/webapp";
2828
private WebClient webClient;
29-
29+
3030
public static Archive<?> defaultArchive() {
31-
32-
WebArchive webArchive =
31+
return tryWrapEAR(defaultWebArchive());
32+
}
33+
34+
public static WebArchive defaultWebArchive() {
35+
return
3336
create(WebArchive.class, "test.war")
3437
.addPackages(true, "org.javaee7.jaspic")
38+
.deleteClass(ArquillianBase.class)
3539
.addAsWebInfResource(resource("web.xml"))
3640
.addAsWebInfResource(resource("jboss-web.xml"))
3741
.addAsWebInfResource(resource("glassfish-web.xml"));
38-
42+
}
43+
44+
public static Archive<?> tryWrapEAR(WebArchive webArchive) {
3945
if (getBoolean("useEarForJaspic")) {
4046
return
4147
// EAR archive
@@ -48,15 +54,19 @@ public static Archive<?> defaultArchive() {
4854
// This is needed to prevent Arquillian generating an illegal application.xml
4955
.addAsModule(
5056
webArchive
51-
);
57+
);
5258
} else {
5359
return webArchive;
5460
}
5561
}
5662

57-
private static File resource(String name) {
63+
public static File resource(String name) {
5864
return new File(WEBAPP_SRC + "/WEB-INF", name);
5965
}
66+
67+
public static File web(String name) {
68+
return new File(WEBAPP_SRC, name);
69+
}
6070

6171
@ArquillianResource
6272
private URL base;

jaspic/dispatching-jsf-cdi/pom.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>org.javaee7</groupId>
7+
<artifactId>jaspic</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
12+
<groupId>org.javaee7</groupId>
13+
<artifactId>jaspic-dispatching-jsf-cdi</artifactId>
14+
<version>1.0-SNAPSHOT</version>
15+
<packaging>war</packaging>
16+
<name>Java EE 7 Sample: jaspic - dispatching JSF CDI</name>
17+
18+
<dependencies>
19+
<dependency>
20+
<groupId>org.javaee7</groupId>
21+
<artifactId>jaspic-common</artifactId>
22+
<version>1.0-SNAPSHOT</version>
23+
</dependency>
24+
</dependencies>
25+
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.javaee7.jaspic.dispatching.bean;
2+
3+
import javax.enterprise.context.RequestScoped;
4+
import javax.inject.Named;
5+
6+
@Named
7+
@RequestScoped
8+
public class MyBean {
9+
10+
public String getText() {
11+
return "Called from CDI";
12+
}
13+
14+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.javaee7.jaspic.dispatching.sam;
2+
3+
import javax.servlet.ServletContextEvent;
4+
import javax.servlet.annotation.WebListener;
5+
6+
import org.javaee7.jaspic.common.BaseServletContextListener;
7+
import org.javaee7.jaspic.common.JaspicUtils;
8+
9+
/**
10+
*
11+
* @author Arjan Tijms
12+
*
13+
*/
14+
@WebListener
15+
public class SamAutoRegistrationListener extends BaseServletContextListener {
16+
17+
@Override
18+
public void contextInitialized(ServletContextEvent sce) {
19+
JaspicUtils.registerSAM(sce.getServletContext(), new TestServerAuthModule());
20+
}
21+
22+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package org.javaee7.jaspic.dispatching.sam;
2+
3+
import static javax.security.auth.message.AuthStatus.SEND_CONTINUE;
4+
import static javax.security.auth.message.AuthStatus.SEND_SUCCESS;
5+
import static javax.security.auth.message.AuthStatus.SUCCESS;
6+
7+
import java.io.IOException;
8+
import java.security.Principal;
9+
import java.util.Map;
10+
11+
import javax.security.auth.Subject;
12+
import javax.security.auth.callback.Callback;
13+
import javax.security.auth.callback.CallbackHandler;
14+
import javax.security.auth.callback.UnsupportedCallbackException;
15+
import javax.security.auth.message.AuthException;
16+
import javax.security.auth.message.AuthStatus;
17+
import javax.security.auth.message.MessageInfo;
18+
import javax.security.auth.message.MessagePolicy;
19+
import javax.security.auth.message.callback.CallerPrincipalCallback;
20+
import javax.security.auth.message.module.ServerAuthModule;
21+
import javax.servlet.ServletException;
22+
import javax.servlet.http.HttpServletRequest;
23+
import javax.servlet.http.HttpServletResponse;
24+
25+
/**
26+
*
27+
* @author Arjan Tijms
28+
*
29+
*/
30+
public class TestServerAuthModule implements ServerAuthModule {
31+
32+
private CallbackHandler handler;
33+
private Class<?>[] supportedMessageTypes = new Class[] { HttpServletRequest.class, HttpServletResponse.class };
34+
35+
@Override
36+
public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler,
37+
@SuppressWarnings("rawtypes") Map options) throws AuthException {
38+
this.handler = handler;
39+
}
40+
41+
@Override
42+
public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {
43+
44+
try {
45+
HttpServletRequest request = (HttpServletRequest) messageInfo.getRequestMessage();
46+
HttpServletResponse response = (HttpServletResponse) messageInfo.getResponseMessage();
47+
48+
if ("include".equals(request.getParameter("dispatch"))) {
49+
50+
String target = "/includedServlet";
51+
if ("jsf".equals(request.getParameter("tech"))) {
52+
target = "/include.jsf";
53+
} else if ("jsfcdi".equals(request.getParameter("tech"))) {
54+
target = "/include-cdi.jsf";
55+
}
56+
57+
request.getRequestDispatcher(target)
58+
.include(request, response);
59+
60+
// "Do nothing", required protocol when returning SUCCESS
61+
handler.handle(new Callback[] { new CallerPrincipalCallback(clientSubject, (Principal) null) });
62+
63+
// When using includes, the response stays open and the main
64+
// resource can also
65+
// write to the response
66+
return SUCCESS;
67+
68+
} else {
69+
70+
String target = "/forwardedServlet";
71+
if ("jsf".equals(request.getParameter("tech"))) {
72+
target = "/forward.jsf";
73+
} else if ("jsfcdi".equals(request.getParameter("tech"))) {
74+
target = "/forward-cdi.jsf";
75+
}
76+
77+
request.getRequestDispatcher(target)
78+
.forward(request, response);
79+
80+
// MUST NOT invoke the resource, so CAN NOT return SUCCESS here.
81+
return SEND_CONTINUE;
82+
}
83+
84+
} catch (IOException | ServletException | UnsupportedCallbackException e) {
85+
throw (AuthException) new AuthException().initCause(e);
86+
}
87+
}
88+
89+
@Override
90+
public Class<?>[] getSupportedMessageTypes() {
91+
return supportedMessageTypes;
92+
}
93+
94+
@Override
95+
public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException {
96+
return SEND_SUCCESS;
97+
}
98+
99+
@Override
100+
public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException {
101+
102+
}
103+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.javaee7.jaspic.dispatching.servlet;
2+
3+
import java.io.IOException;
4+
5+
import javax.inject.Inject;
6+
import javax.servlet.ServletException;
7+
import javax.servlet.annotation.WebServlet;
8+
import javax.servlet.http.HttpServlet;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
12+
import org.javaee7.jaspic.dispatching.bean.MyBean;
13+
14+
/**
15+
*
16+
* @author Arjan Tijms
17+
*
18+
*/
19+
@WebServlet(urlPatterns = "/forwardedServlet")
20+
public class ForwardedServlet extends HttpServlet {
21+
22+
private static final long serialVersionUID = 1L;
23+
24+
@Inject
25+
private MyBean myBean;
26+
27+
@Override
28+
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
29+
response.getWriter().write("response from forwardedServlet - " + myBean.getText());
30+
}
31+
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.javaee7.jaspic.dispatching.servlet;
2+
3+
import java.io.IOException;
4+
5+
import javax.inject.Inject;
6+
import javax.servlet.ServletException;
7+
import javax.servlet.annotation.WebServlet;
8+
import javax.servlet.http.HttpServlet;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
12+
import org.javaee7.jaspic.dispatching.bean.MyBean;
13+
14+
/**
15+
*
16+
* @author Arjan Tijms
17+
*
18+
*/
19+
@WebServlet(urlPatterns = "/includedServlet")
20+
public class IncludedServlet extends HttpServlet {
21+
22+
private static final long serialVersionUID = 1L;
23+
24+
@Inject
25+
private MyBean myBean;
26+
27+
@Override
28+
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
29+
response.getWriter().write("response from includedServlet - " + myBean.getText());
30+
}
31+
32+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.javaee7.jaspic.dispatching.servlet;
2+
import java.io.IOException;
3+
4+
import javax.servlet.ServletException;
5+
import javax.servlet.annotation.WebServlet;
6+
import javax.servlet.http.HttpServlet;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
10+
/**
11+
*
12+
* @author Arjan Tijms
13+
*
14+
*/
15+
@WebServlet(urlPatterns = "/protected/servlet")
16+
public class ProtectedServlet extends HttpServlet {
17+
18+
private static final long serialVersionUID = 1L;
19+
20+
@Override
21+
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22+
response.getWriter().write("Resource invoked\n");
23+
}
24+
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.javaee7.jaspic.dispatching.servlet;
2+
import java.io.IOException;
3+
4+
import javax.servlet.ServletException;
5+
import javax.servlet.annotation.WebServlet;
6+
import javax.servlet.http.HttpServlet;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
10+
/**
11+
*
12+
* @author Arjan Tijms
13+
*
14+
*/
15+
@WebServlet(urlPatterns = "/public/servlet")
16+
public class PublicServlet extends HttpServlet {
17+
18+
private static final long serialVersionUID = 1L;
19+
20+
@Override
21+
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22+
response.getWriter().write("Resource invoked\n");
23+
}
24+
25+
}

jaspic/dispatching-jsf-cdi/src/main/webapp/WEB-INF/beans.xml

Whitespace-only changes.

0 commit comments

Comments
 (0)