diff --git a/karaf/webconsole/branding/src/main/java/org/apache/felix/karaf/webconsole/JaasSecurityProvider.java b/karaf/webconsole/branding/src/main/java/org/apache/felix/karaf/webconsole/JaasSecurityProvider.java
index a32f31d..b2a37ba 100644
--- a/karaf/webconsole/branding/src/main/java/org/apache/felix/karaf/webconsole/JaasSecurityProvider.java
+++ b/karaf/webconsole/branding/src/main/java/org/apache/felix/karaf/webconsole/JaasSecurityProvider.java
@@ -17,7 +17,6 @@
 package org.apache.felix.karaf.webconsole;
 
 import java.io.IOException;
-import java.security.GeneralSecurityException;
 import javax.security.auth.Subject;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -40,26 +39,30 @@
         this.realm = realm;
     }
 
-    public Object authenticate(final String username, final String password) throws GeneralSecurityException {
-        Subject subject = new Subject();
-        LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
-            public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                for (int i = 0; i < callbacks.length; i++) {
-                    if (callbacks[i] instanceof NameCallback) {
-                        ((NameCallback) callbacks[i]).setName(username);
-                    } else if (callbacks[i] instanceof PasswordCallback) {
-                        ((PasswordCallback) callbacks[i]).setPassword(password.toCharArray());
-                    } else {
-                        throw new UnsupportedCallbackException(callbacks[i]);
+    public Object authenticate(final String username, final String password) {
+        try {
+            Subject subject = new Subject();
+            LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
+                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+                    for (int i = 0; i < callbacks.length; i++) {
+                        if (callbacks[i] instanceof NameCallback) {
+                            ((NameCallback) callbacks[i]).setName(username);
+                        } else if (callbacks[i] instanceof PasswordCallback) {
+                            ((PasswordCallback) callbacks[i]).setPassword(password.toCharArray());
+                        } else {
+                            throw new UnsupportedCallbackException(callbacks[i]);
+                        }
                     }
                 }
-            }
-        });
-        loginContext.login();
-        return subject;
+            });
+            loginContext.login();
+            return subject;
+        } catch (Exception e) {
+            return null;
+        }
     }
 
-    public void authorize(Object o, String s) throws GeneralSecurityException {
-        throw new UnsupportedOperationException();
+    public boolean authorize(Object o, String s) {
+        return true;
     }
 }
