Skip to content

Commit 63c5ca9

Browse files
committed
Adding a new sample/test for programmatic login/logout
1 parent 2672388 commit 63c5ca9

File tree

7 files changed

+201
-0
lines changed

7 files changed

+201
-0
lines changed

servlet/pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@
2828
<module>servlet-filters</module>
2929
<module>file-upload</module>
3030
<module>web-fragment</module>
31+
<module>programmatic-login</module>
3132
</modules>
3233
</project>

servlet/programmatic-login/pom.xml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
<parent>
5+
<groupId>org.javaee7.servlet</groupId>
6+
<artifactId>servlet-samples</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<relativePath>../pom.xml</relativePath>
9+
</parent>
10+
11+
<artifactId>programmatic-login</artifactId>
12+
<packaging>war</packaging>
13+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.javaee7.servlet.programmatic.login;
2+
3+
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
import javax.servlet.ServletException;
6+
import javax.servlet.annotation.WebServlet;
7+
import javax.servlet.http.HttpServlet;
8+
import javax.servlet.http.HttpServletRequest;
9+
import javax.servlet.http.HttpServletResponse;
10+
11+
/**
12+
* @author Arun Gupta
13+
*/
14+
@WebServlet(urlPatterns = {"/LoginServlet"})
15+
public class LoginServlet extends HttpServlet {
16+
17+
/**
18+
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
19+
* methods.
20+
*
21+
* @param request servlet request
22+
* @param response servlet response
23+
* @throws ServletException if a servlet-specific error occurs
24+
* @throws IOException if an I/O error occurs
25+
*/
26+
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
27+
throws ServletException, IOException {
28+
response.setContentType("text/html;charset=UTF-8");
29+
PrintWriter out = response.getWriter();
30+
String user = request.getParameter("user");
31+
String password = request.getParameter("password");
32+
33+
if (user != null && password != null) {
34+
request.login(user, password);
35+
}
36+
37+
userDetails(out, request);
38+
}
39+
40+
private void userDetails(PrintWriter out, HttpServletRequest request) {
41+
out.println("isUserInRole?" + request.isUserInRole("g1"));
42+
out.println("getRemoteUser?" + request.getRemoteUser());
43+
out.println("getUserPrincipal?" + request.getUserPrincipal());
44+
out.println("getAuthType?" + request.getAuthType());
45+
}
46+
47+
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
48+
/**
49+
* Handles the HTTP <code>GET</code> method.
50+
*
51+
* @param request servlet request
52+
* @param response servlet response
53+
* @throws ServletException if a servlet-specific error occurs
54+
* @throws IOException if an I/O error occurs
55+
*/
56+
@Override
57+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
58+
throws ServletException, IOException {
59+
processRequest(request, response);
60+
}
61+
62+
/**
63+
* Handles the HTTP <code>POST</code> method.
64+
*
65+
* @param request servlet request
66+
* @param response servlet response
67+
* @throws ServletException if a servlet-specific error occurs
68+
* @throws IOException if an I/O error occurs
69+
*/
70+
@Override
71+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
72+
throws ServletException, IOException {
73+
processRequest(request, response);
74+
}
75+
76+
/**
77+
* Returns a short description of the servlet.
78+
*
79+
* @return a String containing servlet description
80+
*/
81+
@Override
82+
public String getServletInfo() {
83+
return "Short description";
84+
}// </editor-fold>
85+
86+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
3+
<glassfish-web-app error-url="">
4+
<security-role-mapping>
5+
<role-name>g1</role-name>
6+
<principal-name>g1</principal-name>
7+
<group-name>g1</group-name>
8+
</security-role-mapping>
9+
</glassfish-web-app>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
5+
version="3.1">
6+
<servlet>
7+
<display-name>index</display-name>
8+
<servlet-name>index</servlet-name>
9+
<jsp-file>/index.jsp</jsp-file>
10+
</servlet>
11+
12+
<security-role>
13+
<role-name>g1</role-name>
14+
</security-role>
15+
</web-app>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<%@page contentType="text/html" pageEncoding="UTF-8"%>
2+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
3+
"http://www.w3.org/TR/html4/loose.dtd">
4+
5+
<html>
6+
<head>
7+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8+
<title>Servlet Form-Based Security - Success</title>
9+
</head>
10+
<body>
11+
<h1>Servlet Programmatic Security</h1>
12+
13+
Call <a href="LoginServlet?user=u1&password=p1">Servlet</a>
14+
</body>
15+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.javaee7.servlet.programmatic.login;
2+
3+
import com.meterware.httpunit.GetMethodWebRequest;
4+
import com.meterware.httpunit.WebConversation;
5+
import java.io.File;
6+
import java.io.IOException;
7+
import java.net.URL;
8+
import org.jboss.arquillian.container.test.api.Deployment;
9+
import org.jboss.arquillian.junit.Arquillian;
10+
import org.jboss.arquillian.test.api.ArquillianResource;
11+
import org.jboss.shrinkwrap.api.ShrinkWrap;
12+
import org.jboss.shrinkwrap.api.spec.WebArchive;
13+
import org.junit.Test;
14+
import org.junit.runner.RunWith;
15+
import org.xml.sax.SAXException;
16+
17+
/**
18+
* @author Arun Gupta
19+
*/
20+
@RunWith(Arquillian.class)
21+
public class LoginServletTest {
22+
23+
private static final String WEBAPP_SRC = "src/main/webapp";
24+
25+
@ArquillianResource
26+
private URL base;
27+
28+
@Deployment(testable = false)
29+
public static WebArchive createDeployment() {
30+
WebArchive war = ShrinkWrap.create(WebArchive.class).
31+
addClass(LoginServlet.class).
32+
addAsWebInfResource((new File(WEBAPP_SRC + "/WEB-INF", "web.xml")));
33+
return war;
34+
}
35+
36+
@Test
37+
public void testUnauthenticatedRequest() throws IOException, SAXException {
38+
WebConversation conv = new WebConversation();
39+
GetMethodWebRequest getRequest = new GetMethodWebRequest(base + "/LoginServlet");
40+
String responseText = conv.getResponse(getRequest).getText();
41+
42+
assert(responseText.contains("isUserInRole?false"));
43+
assert(responseText.contains("getRemoteUser?null"));
44+
assert(responseText.contains("getUserPrincipal?null"));
45+
assert(responseText.contains("getAuthType?null"));
46+
}
47+
48+
49+
@Test
50+
public void testAuthenticatedRequest() throws IOException, SAXException {
51+
WebConversation conv = new WebConversation();
52+
GetMethodWebRequest getRequest = new GetMethodWebRequest(base + "/LoginServlet?user=u1&password=p1");
53+
String responseText = conv.getResponse(getRequest).getText();
54+
System.out.println(responseText);
55+
56+
57+
assert(responseText.contains("isUserInRole?true"));
58+
assert(responseText.contains("getRemoteUser?u1"));
59+
assert(responseText.contains("getUserPrincipal?u1"));
60+
assert(responseText.contains("getAuthType?BASIC"));
61+
}
62+
}

0 commit comments

Comments
 (0)