BAEL-7115 implementation (#15101)
* implementing BAEL-6833 * implementation for BAEL-7115 * feedback fixes * Moving code folder as per feedback * renaming logic class folder name * adding more methods --------- Co-authored-by: technoddy <mail.technoddy@gmail.com>
This commit is contained in:
parent
4b6c1c6e05
commit
3838bab244
|
@ -68,6 +68,17 @@
|
|||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>${mockito.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.ua-parser</groupId>
|
||||
<artifactId>uap-java</artifactId>
|
||||
<version>${uap.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
||||
<jetty-maven-plugin.version>10.0.4</jetty-maven-plugin.version>
|
||||
<commons-text.version>1.10.0</commons-text.version>
|
||||
<mockito.version>5.6.0</mockito.version>
|
||||
<uap.version>1.5.4</uap.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,26 @@
|
|||
package com.baeldung.servlets;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.*;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.baeldung.servlets.clientinfo.AccountLogic;
|
||||
|
||||
@WebServlet(name = "AccountServlet", urlPatterns = "/account")
|
||||
public class AccountServlet extends HttpServlet {
|
||||
public static final Logger log = LoggerFactory.getLogger(AccountServlet.class);
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
AccountLogic accountLogic = new AccountLogic();
|
||||
Map<String, String> clientInfo = accountLogic.getClientInfo(request);
|
||||
log.info("Request client info: {}, " + clientInfo);
|
||||
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.baeldung.servlets.clientinfo;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import ua_parser.Client;
|
||||
import ua_parser.Parser;
|
||||
|
||||
public class AccountLogic {
|
||||
public Map<String, String> getClientInfo(HttpServletRequest request) {
|
||||
String remoteAddr = request.getRemoteAddr();
|
||||
String remoteHost = request.getRemoteHost();
|
||||
String remoteUser = request.getRemoteUser();
|
||||
String contentType = request.getHeader("content-type");
|
||||
String userAgent = request.getHeader("user-agent");
|
||||
|
||||
Parser uaParser = new Parser();
|
||||
Client client = uaParser.parse(userAgent);
|
||||
|
||||
Map<String, String> clientInfo = new HashMap<>();
|
||||
clientInfo.put("os_family", client.os.family);
|
||||
clientInfo.put("device_family", client.device.family);
|
||||
clientInfo.put("userAgent_family", client.userAgent.family);
|
||||
clientInfo.put("remote_address", remoteAddr);
|
||||
clientInfo.put("remote_host", remoteHost);
|
||||
clientInfo.put("remote_user", remoteUser);
|
||||
clientInfo.put("content_type", contentType);
|
||||
return clientInfo;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.baeldung.servlets.clientinfo;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class ClientInformationUnitTest {
|
||||
|
||||
@Test
|
||||
void givenMockHttpServletRequestWithHeaders_whenGetClientInfo_thenReturnsUserAGentInfo() {
|
||||
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
|
||||
|
||||
when(request.getHeader("user-agent")).thenReturn("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36, acceptLanguage:en-US,en;q=0.9");
|
||||
when(request.getHeader("content-type")).thenReturn("application/json");
|
||||
when(request.getRemoteAddr()).thenReturn("198.167.0.1");
|
||||
when(request.getRemoteHost()).thenReturn("baeldung.com");
|
||||
when(request.getRemoteUser()).thenReturn("baeldung");
|
||||
|
||||
AccountLogic accountLogic = new AccountLogic();
|
||||
Map<String, String> clientInfo = accountLogic.getClientInfo(request);
|
||||
assertThat(clientInfo.get("os_family")).isEqualTo("Mac OS X");
|
||||
assertThat(clientInfo.get("device_family")).isEqualTo("Mac");
|
||||
assertThat(clientInfo.get("userAgent_family")).isEqualTo("Chrome");
|
||||
assertThat(clientInfo.get("content_type")).isEqualTo("application/json");
|
||||
assertThat(clientInfo.get("remote_user")).isEqualTo("baeldung");
|
||||
assertThat(clientInfo.get("remote_address")).isEqualTo("198.167.0.1");
|
||||
assertThat(clientInfo.get("remote_host")).isEqualTo("baeldung.com");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue