diff --git a/ccm-core/src/main/java/org/libreccm/ui/IsAuthenticatedFilter.java b/ccm-core/src/main/java/org/libreccm/ui/IsAuthenticatedFilter.java
new file mode 100644
index 000000000..037a26ed8
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/IsAuthenticatedFilter.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2020 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package org.libreccm.ui;
+
+import org.libreccm.security.Shiro;
+
+import java.io.IOException;
+import java.net.URI;
+
+import javax.inject.Inject;
+import javax.servlet.ServletContext;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.PreMatching;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@PreMatching
+public class IsAuthenticatedFilter implements ContainerRequestFilter {
+
+ @Inject
+ private ServletContext servletContext;
+
+ @Inject
+ private Shiro shiro;
+
+ @Override
+ public void filter(final ContainerRequestContext requestContext)
+ throws IOException {
+ if (!shiro.getSubject().isAuthenticated()) {
+ final String contextPath = servletContext.getContextPath();
+ final String returnUrl = requestContext
+ .getUriInfo()
+ .getRequestUri()
+ .getPath();
+ requestContext.abortWith(
+ Response.temporaryRedirect(
+ URI.create(
+ String.format(
+ "/%s/ccm/register?return_url=%s",
+ contextPath,
+ returnUrl
+ )
+ )
+ ).build()
+ );
+ }
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminApplication.java b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminApplication.java
index d9dcc457e..c8bc90169 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminApplication.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminApplication.java
@@ -18,8 +18,9 @@
*/
package org.libreccm.ui.admin;
+import org.libreccm.ui.IsAuthenticatedFilter;
-
+import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@@ -40,11 +41,19 @@ public class AdminApplication extends Application {
@Override
public Set> getClasses() {
- return adminPages
- .stream()
- .map(AdminPage::getControllerClasses)
- .flatMap(controllers -> controllers.stream())
- .collect(Collectors.toSet());
+ final Set> classes = new HashSet<>();
+
+ classes.add(IsAuthenticatedFilter.class);
+
+ classes.addAll(
+ adminPages
+ .stream()
+ .map(AdminPage::getControllerClasses)
+ .flatMap(controllers -> controllers.stream())
+ .collect(Collectors.toSet())
+ );
+
+ return classes;
// final Set> classes = new HashSet<>();
// classes.add(SystemInformationController.class);
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationController.java b/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationController.java
index 98fd2acd6..bbc38465e 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationController.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationController.java
@@ -18,6 +18,10 @@
*/
package org.libreccm.ui.admin.systeminformation;
+import org.libreccm.core.CoreConstants;
+import org.libreccm.security.AuthorizationRequired;
+import org.libreccm.security.RequiresPrivilege;
+
import javax.enterprise.context.RequestScoped;
import javax.mvc.Controller;
import javax.ws.rs.GET;
@@ -34,6 +38,8 @@ public class SystemInformationController {
@GET
@Path("/")
+ @AuthorizationRequired
+ @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
public String getSystemInformation() {
return "org/libreccm/ui/admin/systeminformation.xhtml";
}