Apache Shiro 1.8.0 wurde letzte Woche freigegeben (released). In diesem Artikel gebe ich eine kurze Übersicht über die Änderungen seit Apache Shiro 1.7.1.
Änderungen in Apache Shiro 1.8.0
Apache Shiro 1.8.0 ist ein relativ kleines Release. Wir haben zwei Fehler behoben und ein neues Feature umgesetzt.
Apache Shiro: [SHIRO-678] HTTP-Body verändert ohne JSESSIONID-Cookie
[SHIRO-678] - Strings garbled when POST without JSESSIONID cookie
Das war eines der ersten Issues, die ich für Apache Shiro überhaupt eingestellt habe. Wenn man seinen Login über ein klassisches HTTP-Formular (Mime-Type: application/x-www-form-urlencoded
) abschickt, ist man potentiell von diesem Bug betroffen. Vor Apache Shiro 1.8.0 kann es passieren, dass der POST-Inhalt (Body) modifiziert wurde, bevor er im eigentlichen Servlet oder in der JAX-RS-Methode verarbeitet werden kann.
Nun hat Romain Manni-Bucau uns darauf hingewiesen, dass wir die Methode ServletRequest.getParameter(String name) nutzen um herauszufinden, ob eine JSESSIONID
als Parameter übergeben wurde. Üblicherweise denkt man ja im Web sofort an Query-Parameter in der URL. Allerdings sind die Inhalte von Formularen nach Web-Spezifikation auch Parameter. Wurde die JSESSIONID
also nicht als Cookie gefunden, wurde auf der Suche nach dieser auch der Body eingelesen, dekodiert und wieder zurückgeschrieben -- ohne diesen wieder zu kodieren. Tausden Dank, κύδος und Grüße an Romain, der uns darauf gestoßen hat!
Um ein (halbwegs) abwärtskompatibles Verhalten zu behalten, machen wir nun eine schnelle Prüfung, ob JSESSIONID
oder jsessionid
überhaupt in der URL (als Query-Parameter?) vorhanden ist. Es ist kein gründlicher Check, aber völlig ausreichend: Der Body wird nicht verändert.
Das löst ein Problem einer meiner Anwendungen, bei der sich die Benutzer nicht anmelden konnten, falls sie ein Sonderzeichen im Passwort hatten -- es sei denn, sie hatten ein JSESSIONID-Cookie gesetzt.
[SHIRO-825] - Abschließender Slash in URI führt zu IllegalArgumentException
Das ist wohl einer der hässlicheren Bugs. Die Klasse PathMatchingFilterChainResolver.java
ist die Haupt-Klasse um zu prüfen, ob Shiro einen Pfad überhaupt behandeln sollte. Durch einen kleinen Fehler bei einem Bugfix in Apache Shiro 1.7.1 wurden aber abschließende Schrägstriche nicht mehr korrekt behandelt. Brian war sehr schnell und hat eine Fehlerbehebung mit zwei Tests geschrieben.
@Documented in den Apache Shiro 1.8.0 authorization Annotations aufnehmen
[SHIRO-216] - Add @Documented to Shiro authorization annotations
Das war eine unserer peinlichen Leichen im Keller. In den vergangen Wochen habe ich alte JIRA-Issues aufgeräumt und viele als Altlast, verfallen oder Duplikat markiert. Dabei bin ich über SHIRO-216 gestolpert. Unsere Annotation Classes (auch @interfaces
genannt) haben jetzt eine @Documented
Annotation erhalten. Dadurch erhält Code, der unsere Annotations nutzt, auch in dessen Javadoc den Hinweis, das unsere Shiro-Annotations vorhanden sind.
Apache Shiro 1.8.0 herunterladen
Wie immer könnt ihr Apache Shiro 1.8.0 von Maven Central herunterladen (empfohlener Weg). Weitere Informationen gibt es auf Englisch auf der Apache Shiro Download Seite.