2017-01-22 24 views
0

Ich verwende Spring Security zu meiner Anwendung und hier ist das Sicherungsteil, die den Benutzer aber die Anmeldeseite authentifiziert wird von Spring Security gegeben:Wie verwende ich Spring Security zur benutzerdefinierten Anmeldeseite?

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    public void configure(HttpSecurity httpSecurity) throws Exception { 
     httpSecurity 
      .authorizeRequests() 
       .antMatchers("/home*").hasRole("USER") 
       .and() 
      .formLogin(); 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user") 
       .password("password") 
       .roles("USER") 
    } 
} 

Statt Spring Login-Seite möchte ich meine Login-Seite verwenden, die unten:

login.html:

<html lang='en'> 
    <head> 
     <title>WebApp</title> 
     <meta charset='utf-8' /> 

     <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
      <link rel="stylesheet" type="text/css" href="css/bootstrap.css" /> 
      <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" /> 
      <link rel="stylesheet" href="css/login.css" /> 
    </head> 

    <body> 
     <div class="login-page"> 
      <img src='img/taxi_.jpg' style='width: 180px; margin-left: auto; margin-right: auto; display: block; padding-top: 20px; padding-bottom:20px;' /> 

      <div class="heading"> 
       <center>Dashboard</center> 
      </div> 
      <div class="form"> 
       <form action ="home.html" class="register-form"> 
        <input type="text" placeholder="name"/> 
        <input type="password" placeholder="password"/> 
        <input type="text" placeholder="email address"/> 
        <button>create</button> 
        <p class="message">Already registered? <a href="#">Sign In</a></p> 
       </form> 
       <form action="home.html" class="login-form"> 
        <input type="text" placeholder="username"/> 
        <input type="password" placeholder="password"/> 
        <button id="button_login">login</button> 
        <p class="message">Not registered? <a href="#">Create an account</a></p> 
       </form> 
      </div> 
     </div> 
    </body> 
</html> 

Wie kann ich meine benutzerdefinierte Login-Seite verwenden gezeigt statt Spring Security-Login-Seite werden?

+0

Ich habe versucht, 'httpSecurity.authorizeRequests(). antMatchers ("/ home *"). hasRole ("USER") .und() .formLogin(). loginPage ("login.html"). Aber es gab die selbe Frühlings-Login-Seite zurück. – RKR

+0

Ändern Sie die Login-Seite zu meiner benutzerdefinierten nicht die Frühjahr Sicherheits-Standard-Seite – RKR

+0

Sie müssen sicherstellen, dass die 'url'" /login.html "kann richtig behandelt werden – JonahCui

Antwort

1

Siehe Spring Security Reference:

Während die automatisch generierten Log-in-Seite bequem zu bekommen und läuft schnell, werden die meisten Anwendungen wollen ihre eigene Login-Seite zur Verfügung zu stellen. Zu tun, damit wir unsere Konfiguration aktualisieren, wie unten zu sehen:

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .anyRequest().authenticated() 
      .and() 
     .formLogin() 
      .loginPage("/login") 1 
      .permitAll();  2 
} 

Die aktualisierte Konfiguration gibt die Position des Login-Seite.
Wir müssen allen Benutzern (d. H. Nicht authentifizierten Benutzern) Zugriff auf unsere Anmeldeseite gewähren. . Die formLogin() permitAll() -Methode ermöglicht für alle URLs mit formularbasierten Anmeldung zugeordnet Zugriff auf alle Benutzer gewähren

Ihr modifizierten Code.

public void configure(HttpSecurity httpSecurity) throws Exception { 
    httpSecurity 
     .authorizeRequests() 
      .antMatchers("/home*").hasRole("USER") 
      .and() 
     .formLogin() 
      .loginPage("/login.html") 
      .permitAll(); 
} 
0
httpSecurity.authorizeRequests() 
       .antMatchers("/home*").hasRo‌​le("USER").and()           
      .formLogin() 
       .loginPage("/login.html") 
       .permitAll(); 

loginFormUrl muss mit "/" oder einer absoluten URL gestartet werden. und stellen Sie sicher, dass die Anfrage /login.html richtig behandelt werden kann.

BTW: Wenn Sie nicht die Verarbeitung url Config haben, wird die Verarbeitung url identisch sein mit login page (/login.html) url mit post Methode, aber in Ihrer Login-Seite, die Aktion url ist /home.html, Config bitte die Verarbeitung URL '/home.html'

.formLogin() 
    .loginProcessingUrl("/home.html") 
    .loginPage("/login.html") 
    .permitAll(); 

Und CSRF standardmäßig aktiviert ist, kann ich keine CSRF Token in Ihrem Anmeldeformular. Sie können CSRF deaktivieren oder mit Token anfordern.

http.csrf().disable(); 
+0

Bitte siehe [hier] (https://docs.spring.io/ spring-security/site/docs/aktuelle/reference/htmlsingle/# csrf-include-csrf-token) – chaoluo

Verwandte Themen