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?
%Vor%web.xml
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:
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.