2016-09-23 2 views
1
gleiche Seite mit Fehlermeldung angezeigt werden

die Idee ist einfach Wenn mein Login Benutzer /loginerror umgeleitet wird versagt, ist aber nicht als ausgenommennicht in der Lage im Frühjahr mvc

LoginController Arbeits

@RequestMapping(value = "/login", method = RequestMethod.GET) 
     public String login(Model model) { 
      return "login"; 
     } 

     @RequestMapping(value = "/loginerror", method = RequestMethod.GET) 
     public String loginFailed(Model model) { 
      model.addAttribute("error", "true"); 
      return "login"; 
     } 

     @RequestMapping(value = "/logout", method = RequestMethod.GET) 
     public String logout(Model model) { 
      return "login"; 
     } 

Login .jsp

<c:if test="${not empty error}"> 
          <div class="alert alert-danger"> 
           <spring:message 
            code="AbstractUserDetailsAuthenticationProvider.badCredentials" /> 
           <br /> 
          </div> 
         </c:if> 
         <form action="<c:url value= "/j_spring_security_check"></c:url>" 
          method="post"> 
          <fieldset> 
           <div class="form-group"> 
            <input class="form-control" placeholder="User Name" 
             name='j_username' type="text"> 
           </div> 
           <div class="form-group"> 
            <input class="form-control" placeholder="Password" 
             name='j_password' type="password" value=""> 
           </div> 
           <input class="btn btn-lg btn-success btn-block" type="submit" 
            value="Login"> 
          </fieldset> 
         </form> 
        </div> 

sec urity-context.xml

<security:http auto-config="true"> 
    <security:intercept-url pattern="/all/add" 
     access="hasRole('ROLE_ADMIN')" /> 
    <security:form-login login-page="/login" 
     default-target-url="/all/add" authentication-failure-url="/loginerror" /> 
    <security:logout logout-success-url="/logout" /> 
    <security:csrf disabled="true" /> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="admin" authorities="ROLE_ADMIN" 
       password="admin" /> 
     </security:user-service> 
    </security:authentication-provider> 

</security:authentication-manager> 

, was ich versuche zu tun, um den Benutzer umleiten zum Login-Seite, wenn seine Anmeldung nicht möglich, aber jedes Mal wenn ich mir Fehler 404 Seite nicht gefunden localhost......../j_spring_security_check

auf url bin immer

bearbeiten

Federfehlermeldung istAbstractUserDetailsAuthenticationProvider.badCredentials=The user-name or password you entered is incorrect.

nach Debug-Anweisung innerhalb /loginerror Methode setzen kam ich zu wissen, dass diese Methode nicht einmal aufgerufen werden wird

wie dies abzufangen, wenn URL falsch ist?

web.xml

<servlet> 
     <servlet-name>dispatcherServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/security-context.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
+0

Sie die Anfrage-Mapping unterstützt haben für „/ loginfailed "aber nicht für"/loginerror " – guchuan

+0

@guchuan immer noch der selbe Fehler –

+0

Kannst du deine WEB-INF/web.xml posten, so können wir auch einen Blick darauf werfen. –

Antwort

0

die Version von Feder Sie verwenden nicht <form action="<c:url value= "/j_spring_security_check"></c:url>" method="post"> Verwendung/login als URL <form action="<c:url value= "/login"></c:url>" method="post"> , da Sie diesen Link eindeutig darum gebeten erklärt die Unterschiede statt Why doesn't my custom login page show with Spring Security 4?

+0

dank habe ich hier sah sollte :) –

+0

, wenn Sie erklären, warum dieses Arbeits toll :) wird –

0

ich ein "/ loginerror" nicht in Ihrem Controller sehen, dass ein Problem sein, so natürlich, dass Methode nie aufgerufen, entweder das Scheitern ändern -url loginerror loginerr oder loginFailed. Andere haben darauf hingewiesen, obwohl Sie normalerweise -failure-url = "/ login? Error = true" verwenden und dann den Parameter error request verwenden, um dem Benutzer anzuzeigen, dass er seine Anmeldung durcheinander gebracht hat.

+0

Thaks für die Antwort Ich habe die Bearbeitung gemacht, aber ihre Sitll funktioniert nicht –

+0

brauchst du die Default-Target-URL? Ich schaue mir meine security-context.xml für eine App an, die ich gemacht habe und sie hat sie nicht. – Snickers3192

+0

okey lass mich das auch tun ... –

0

Überprüfen Sie die Reihenfolge der Intercept-URL, es basiert auf zuerst in. Vielleicht ist das das Problem. Versuchen Sie auch unten in Ihrem Code.

always-use-default-target="true" 
+0

in 'xml' Reihenfolge doesnt Angelegenheiten yeah, aber ich werde es gerne versuchen, danke :) –

+0

und es funktioniert nicht :( –

+0

Können Sie versuchen, dies \t \t \t \t \t \t \t \t <-?! aktivieren csrf Schutz -> \t \t \t