Java: Lizenzierung einer Webapp. Überprüfen Sie vor dem Login die Lizenz

9

Ich möchte meine Webapp-Lizenz schützen. Wenn irgendeine Seite / Ressource von webapp angefordert wird, möchte ich zuerst nach der Lizenz suchen. Wenn die Lizenz nicht gefunden wird, möchte ich auf die Seite zum Hochladen der Lizenz umleiten.

Ich habe einen Filter erstellt, der allen Anfragen zugeordnet ist, wo ich nach einer Lizenz suchen und gegebenenfalls umleiten kann. Das Problem ist, dass meine Webanwendung Sicherheitseinschränkung der Login-Authentifizierung hat. Weitere Informationen finden Sie in web.xml.

Aufgrund der Sicherheitsbeschränkung werden alle Anfragen zuerst von der Login-Authentifizierung abgefangen und dann an meinen Filter weitergeleitet. Ich möchte jedoch nach einer Lizenz suchen, bevor die Anmeldung erfolgen kann.

Hier ist eine verwandte Frage, die ich gestellt habe.

Java: Alle Anfragen abfangen bevor sie zur Authentifizierung gehen

Ein Priorisieren des Filters über die Sicherheitsbeschränkung scheint unmöglich zu sein. Also, ich möchte fragen, gibt es eine andere Möglichkeit, wie ich diesen Anwendungsfall angehen kann?

  

web.xml

%Vor%     
Pratik Patel 23.12.2015, 09:45
quelle

2 Antworten

1

Wenn Sie die Lizenz vor der Authentifizierung überprüfen müssen, besteht die einzige Möglichkeit darin, programmatische Sicherheit zu verwenden und die Lizenzüberprüfung als Teil des Prozesses einzubeziehen.

  

Programmatische Sicherheit ist nützlich, wenn die deklarative Sicherheit allein ist   nicht ausreichend, um das Sicherheitsmodell einer Anwendung auszudrücken. Das   API für programmatische Sicherheit besteht aus Methoden des EJBContext   Schnittstelle und die HttpServletRequest-Schnittstelle. Diese Methoden ermöglichen   Komponenten, um Business-Logik-Entscheidungen basierend auf der Sicherheitsrolle zu treffen   des Anrufers oder Remote-Benutzers.

     

Ссылка

Hier ein paar kurze Beispiele: Ссылка

Ich habe die programmatische Sicherheit selbst nicht gemacht, aber von dem Aussehen her könnte man so etwas tun:

  1. Lassen Sie die Containersicherheit aus Ihrer web.xml fallen - durch das Design wird es allem anderen vorausgehen und Ihnen dadurch in die Quere kommen. Im Idealfall können Sie die auth-Methode auf NONE setzen und die Sicherheitsbeschränkung beibehalten - vermutlich wird Ihnen beim Versuch, auf die Fehlerseite zuzugreifen, direkt die Fehlerseite angezeigt, und Sie können dann in Servlets 2) und 3) (unten) ausführen, bevor Sie es erneut versuchen . Wenn Sie die Sicherheitseinschränkung ebenfalls löschen müssen, verwenden Sie Filter wie folgt.
  2. Fügen Sie einen Filter hinzu, der die Lizenz überprüft. Wenn es fehlschlägt, wird auf eine Seite umgeleitet, um die Lizenz hochzuladen und es erneut zu versuchen. Ist dies nicht der Fall, führen Sie den nächsten Filter in der Kette aus.
  3. Der nächste Filter in der Kette weiß, dass die Lizenz gültig ist. Wenn der Benutzer nicht angemeldet ist, versucht er, den Benutzer und das Passwort als Anfrageparameter zu erhalten. Wenn sie vorhanden sind, versucht sie, sie programmatisch zu authentifizieren. An diesem Punkt führen Sie eines der Beispiele im vorherigen Link aus. Wenn der Benutzer angemeldet ist, fahren Sie fort. Wenn die Anmeldeinformationen nicht übereinstimmen oder keine Anmeldeinformationen vorhanden sind, leiten Sie sie auf eine benutzerdefinierte Anmeldeseite um, damit der Benutzer seine Anmeldeinformationen eingeben und es erneut versuchen kann.
  4. Wenn Sie die Sicherheitseinschränkung aus Ihrer web.xml löschen müssen, sollten Sie einen anderen Filter verwenden, um hier die Rollen und alles, was Sie sonst noch brauchen, zu überprüfen.

Stellen Sie sicher, dass Sie auf einen anderen Pfad umleiten, sodass diese Seiten die Filter nicht erneut aufrufen und loopen. (Filter können so konfiguriert werden, dass sie beim Weiterleiten / Umleiten übersprungen werden, und ich denke, das ist der Standard, aber wenn Sie die Sicherheitsbeschränkung fallen lassen wollten, dann sollten Sie sicher sein, dass sie egal aufgerufen werden.)

Sie können all dies in einem einzigen Filter tun und / oder anstatt beim Fehlschlagen die entsprechende Antwort zu schreiben, die entsprechende Antwort simulieren (ein Servlet wird mehrmals selbst simuliert). Ein Filter ist dafür besser als ein Servlet, weil Sie sicher sein können, dass er für einen Zugriffsversuch aufgerufen wurde.

Ein anderer Weg wäre, alles in 2) und 3) als ein einzelnes Servlet neben der "echten" App zu schreiben und einen Filter zu haben, der darauf umleitet, wenn die Sitzung nicht authentifiziert ist und nicht die richtige "Gültig -license "attribute set (Sie legen es im Servlet fest). Dies könnte schneller und vielleicht einfacher zu warten, aber nicht so eng gekoppelt sein.

    
user5737251 03.01.2016, 06:40
quelle
0

Das hat nichts mit JACC zu tun. Die normale Lizenzprüfung der Webanwendung wird durchgeführt, sobald die Benutzerautorisierung abgeschlossen ist. Wie Sie dies überprüfen, hängt von Ihrem Design der Anwendung ab.

%Vor%     
BValluri 01.01.2016 16:51
quelle