Доступ к Spring Security запрещен с помощью пользовательской страницы входа - PullRequest
0 голосов
/ 01 мая 2020

Я создал одного пользователя Inmemory. Изначально я пытался с формой по умолчанию. После успешного входа в систему вызов другого API с использованием defaultSuccessUrl, пока все здесь хорошо. Теперь я реализовал одну пользовательскую страницу входа html, когда я пытаюсь войти с правильными и неправильными учетными данными, получая отказ в доступе и перенаправляя страницу входа снова.

Любой, пожалуйста, помогите мне.

Конфигурация безопасности:

@Configuration
@EnableWebSecurity
public class SecurityConfige extends WebSecurityConfigurerAdapter {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/","index","/courses","login").permitAll()
        .anyRequest()
        .authenticated()
        .and()
        .formLogin()
        .loginPage("/login")
         .defaultSuccessUrl("/courses", true);
    }

    @Override
    @Bean
    public UserDetailsService userDetailsServiceBean() throws Exception {
        UserDetails admin= User.builder()
                .username("nithin")
                .password(passwordEncoder.encode("nithin"))
                .roles("ADMIN")
                .authorities(new SimpleGrantedAuthority("ROLE_ADMIN"))
                .build();

        return new InMemoryUserDetailsManager(admin);
    }

}

Html Страница входа:

<html lang="en">

</head>
<body>
<div class="container">
    <form class="form-signin" method="post" action="/login">
        <h2 class="form-signin-heading">Please login to Nithincode</h2>
        <p>
            <label for="username" class="sr-only">Username</label>
            <input type="text" id="username" name="username" class="form-control" placeholder="Username" required=""
                   autofocus="">
        </p>
        <p>
            <label for="password" class="sr-only">Password</label>
            <input type="password" id="password" name="password" class="form-control" placeholder="Password"
                   required="">
        </p>
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

        <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
    </form>
</div>
</body>
</html>

Логин API:

@GetMapping("login")
    public String getLoginView() {
        return "login";
    }

1 Ответ

1 голос
/ 01 мая 2020

Я думаю, что вы неправильно настраиваете службу сведений о пользователе, и ваш пользователь не найден (для которого Spring показывает неверные учетные данные). Может быть, попробуйте немного изменить конфигурацию:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserDetailsService myService;

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/","index","/courses","login").permitAll()
        .anyRequest()
        .authenticated()
        .and()
        .formLogin()
        .loginPage("/login")
        .defaultSuccessUrl("/courses", true);
  }

  @Bean
  public UserDetailsService myService() throws Exception {
    UserDetails admin= User.builder()
        .username("nithin")
        .password(new BCryptPasswordEncoder().encode("nithin"))
        .roles("ADMIN")
        .authorities(new SimpleGrantedAuthority("ROLE_ADMIN"))
        .build();

    return new InMemoryUserDetailsManager(admin);
  }

  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth)
      throws Exception {
    auth.userDetailsService(myService).passwordEncoder(
        new BCryptPasswordEncoder());
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...