2017-01-22 3 views
0

Я использую Spring Security для моего приложения, и здесь является частью безопасности, которая проверяет подлинность пользователя, но страница Войти дается Spring Security:Как использовать Spring Security для пользовательской страницы входа?

@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") 
    } 
} 

Вместо страницы Войти в Spring Я хочу использовать мою страницу входа в систему, которая ниже:

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> 

Как я могу использовать мою пользовательскую страницу входа в систему, чтобы показать вместо страницы входа Spring Security в?

+0

Я попытался 'httpSecurity.authorizeRequests(). antMatchers ("/ home *"). hasRole ("USER") .and() .formLogin(). loginPage ("login.html") '. Но он возвратил ту же самую страницу входа в Spring. – RKR

+0

Измените страницу входа в мою пользовательскую, а не страницу по умолчанию для безопасности весны. – RKR

+0

Вы должны убедиться, что «url'» /login.html «можно обрабатывать правильно. – JonahCui

ответ

1

См Spring Security Reference:

В то время как автоматически войти в страницу удобно получить и работает быстро, большинство приложений будет хотеть, чтобы обеспечить их собственный журнал в странице. Для этого мы можем обновить нашу конфигурацию, как показано ниже:

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

Обновленная конфигурация определяет местоположение журнала на стр.
Мы должны предоставить всем пользователям (то есть пользователям, не прошедшим проверку подлинности) доступ к нашей странице входа в систему. . Метод formLogin() permitAll() позволяет предоставить доступ всем пользователям для всех URL-адресов, связанных с журналом на основе форм в

Ваш измененный код:.

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 должен быть запущен с "/" или абсолютный URL. и убедитесь, что запрос /login.html можно обработать правильно.

КСТАТИ: если вы не конфиг URL-адрес обработки, обработка URL будет же с login page (/login.html) URL с post методом, но на странице входа в систему, URL-адрес действия /home.html, пожалуйста конфиг перерабатывающего URL для «/home.html»

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

И CSRF включен по умолчанию, я не могу найти CSRF маркера в вашей форме авторизации. вы можете отключить csrf или запросить с помощью токена.

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

См. [Здесь] (https://docs.spring.io/ весна-безопасности/сайт/документы/ток/ссылка/htmlsingle/# CSRF-включают-CSRF-маркер) – chaoluo

Смежные вопросы