diff --git a/core-java-modules/core-java-security-manager/pom.xml b/core-java-modules/core-java-security-manager/pom.xml
new file mode 100644
index 000000000000..51d5e7d78f40
--- /dev/null
+++ b/core-java-modules/core-java-security-manager/pom.xml
@@ -0,0 +1,34 @@
+
+ 4.0.0
+ core-java-security-manager
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-security-manager
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+
diff --git a/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/CustomPermission.java b/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/CustomPermission.java
new file mode 100644
index 000000000000..5f9c43336fee
--- /dev/null
+++ b/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/CustomPermission.java
@@ -0,0 +1,13 @@
+package com.baeldung.security.manager;
+
+import java.security.BasicPermission;
+
+public class CustomPermission extends BasicPermission {
+ public CustomPermission(String name) {
+ super(name);
+ }
+
+ public CustomPermission(String name, String actions) {
+ super(name, actions);
+ }
+}
diff --git a/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/Service.java b/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/Service.java
new file mode 100644
index 000000000000..1b9f14e3b8d3
--- /dev/null
+++ b/core-java-modules/core-java-security-manager/src/main/java/com/baeldung/security/manager/Service.java
@@ -0,0 +1,18 @@
+package com.baeldung.security.manager;
+
+public class Service {
+
+ public static final String OPERATION = "my-operation";
+
+ public void operation() {
+ SecurityManager securityManager = System.getSecurityManager();
+ if (securityManager != null) {
+ securityManager.checkPermission(new CustomPermission(OPERATION));
+ }
+ System.out.println("Operation is executed");
+ }
+
+ public static void main(String[] args) {
+ new Service().operation();
+ }
+}
diff --git a/core-java-modules/core-java-security-manager/src/test/java/com/baeldung/security/manager/SecurityManagerUnitTest.java b/core-java-modules/core-java-security-manager/src/test/java/com/baeldung/security/manager/SecurityManagerUnitTest.java
new file mode 100644
index 000000000000..a845f233b542
--- /dev/null
+++ b/core-java-modules/core-java-security-manager/src/test/java/com/baeldung/security/manager/SecurityManagerUnitTest.java
@@ -0,0 +1,35 @@
+package com.baeldung.security.manager;
+
+import org.junit.Test;
+
+import java.net.URL;
+import java.security.AccessControlException;
+import java.util.concurrent.Callable;
+
+public class SecurityManagerUnitTest {
+
+ @Test(expected = AccessControlException.class)
+ public void whenSecurityManagerIsActive_thenNetworkIsNotAccessibleByDefault() throws Exception {
+ doTest(() -> {
+ new URL("http://www.google.com").openConnection().connect();
+ return null;
+ });
+ }
+
+ @Test(expected = AccessControlException.class)
+ public void whenUnauthorizedClassTriesToAccessProtectedOperation_thenAnExceptionIsThrown() throws Exception {
+ doTest(() -> {
+ new Service().operation();
+ return null;
+ });
+ }
+
+ private void doTest(Callable action) throws Exception {
+ System.setSecurityManager(new SecurityManager());
+ try {
+ action.call();
+ } finally {
+ System.setSecurityManager(null);
+ }
+ }
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index ecf1f4147e77..082ffbef53a2 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -19,6 +19,7 @@
core-java-optional
core-java-lang-operators
core-java-networking-2
+ core-java-security-manager