Warum nicht meine benutzerdefinierte login-Seite zeigen, mit Spring Security 4?
Ich bin in der Lage zu verwenden, eine benutzerdefinierte login-Seite mit Spring Security 3.2.4, aber nach der Migration mit dem code unter Verwendung von 4.0.0, die ich sehe, eine generische login-Formular statt meine eigenen:
<beans:bean id="authSuccessHandler" class="com.company.web.RoleBasedAuthenticationSuccessHandler" />
<http disable-url-rewriting="false" use-expressions="true">
<form-login login-page="/login"
username-parameter="j_username"
password-parameter="j_password"
login-processing-url="/j_spring_security_check"
authentication-failure-url="/login?login_error=true"
authentication-success-handler-ref="authSuccessHandler"/>
<!-- SOME INTERCEPT-URLs (redacted) -->
<intercept-url pattern="/login" access="permitAll"/>
<remember-me
remember-me-parameter="_spring_security_remember_me"
remember-me-cookie="SPRING_SECURITY_REMEMBER_ME_COOKIE"/>
<logout
logout-url="/j_spring_security_logout"
logout-success-url="/index" />
</http>
Ich habe auch versucht, aktivieren Sie die debug-Protokollierung auf den verschiedenen Spring-Klassen. Ich setze es auf meine benutzerdefinierte authSuccessHandler, aber ich sehe keine Ausgabe von es. Kein Glück mit der Suche an oder Google entweder.
Gibt es etwas, unvereinbar zu dieser Konfiguration?
Update:
Bin ich auch mit Apache Tiles als so:
<definition name="login" extends="scrollableLayout">
<put-attribute name="header" value="/WEB-INF/jsp/heading_blue.jsp"/>
<put-attribute name="body" value="/WEB-INF/jsp/login.jsp"/>
</definition>
Sind und die folgenden:
<mvc:view-controller path="/login" />
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spring Security 3.x verwendet
spring_security_login
als die Standard-login-URL (source
: offizielle Dokumentation). Dies könnte auf einen benutzerdefinierten Wert als<security:form-login login-page="/login">
und kartiert, um einen controller zu Rendern einer benutzerdefinierten Seite.Spring Security 4.x verlassen hat
spring_security_login
und wechselte zulogin
als die Standard-login-URL (source
: offizielle Spring Security 4.x migration guide). Also, die URLlogin
geht nun in den Standard-Spring Security-Infrastruktur, das zeigt die standardmäßigen, automatisch generierten login-Seite.Die Abhilfe ist einfach, wenn Sie mit JSP als view-rendering-Technologie. Benennen Sie einfach Ihre login-Seite zu
login.jsp
legen Sie es in den root Ordner der Seite, die Hierarchie und Spring Security holt es sich automatisch ein. Wenn Sie nicht mit JSP, haben Sie, um eine anderelogin-page
Wert (vielleichtsignin
stattlogin
und ändern Sie die controller-Zuordnung als gut.Beachten Sie, dass das Standard-logout-URL hat sich auch geändert in 4.x. Wenn Sie alle benutzerdefinierten Logik, geschrieben für den logout-URL, stellen Sie sicher, zu überprüfen, dass als gut.
Überprüfen Sie die offizielle migration guide, der als eine Menge Dinge haben sich geändert in 4.x.
/login
das wiederum machtlogin.jsp
?<security:form-login login-page="login">
müssen geändert werden, um<security:form-login login-page="signin">
und@RequestMapping("login")
auf dem controller wird sich ändern müssen, um@RequestMapping("signin")
. Das sollte ausreichend sein. Sie können einen anderen Wert als den Standardwertlogin
.j_spring_security_check
ist nicht gültig für Spring Security 4.x. Ich habe gegangen durch das Spring Security 4.x-source-code und die Zeichenfolge nicht angezeigt. Plus, ich erfolgreich migriert meine app mithilfe des migration guide. Kannst du eine Beispiel-app mit Ihren genauen Konfiguration und das problem repliziert werden irgendwo??? Das kann ein einfacher Weg zu Debuggen.<security:intercept-url access="permitAll" pattern="/signin"/>
. Es ist auch möglich, mit<security:intercept-url access="isAnonymous()" pattern="/signin"/>
, die einschränken würde, die login-Seite für anonyme Benutzer nur. Dies könnte Probleme verursachen, wenn Sie erfordern eine Authentifizierung der Benutzer für sensible Aktionen wie Bestellungen, Zahlungen, Passwort ändern, etc. auch wenn Sie angemeldet sind, weshalbpermitAll
ist besser alsisAnonymous()
./login
wie die login-URL war ein bug in 4.0.0 dieses Problem wurde behoben in 4.0.1. Tun Sie versuchen, ein Upgrade auf Spring Security 4.0.1 um zu sehen, ob Sie verwenden können/login
wie die login-URL./signin
als URL statt/login
wie das funktionieren sollte und andere bestätigt haben es da nicht so gut arbeiten.