Как включить дайджест-проверку подлинности в Spring Boot? - PullRequest
0 голосов
/ 05 апреля 2019

Я использую дайджест-аутентификацию с помощью Spring Boot.

Проблема: когда я получаю доступ к защищенному URL-адресу, отображается диалоговое окно по умолчанию с запросом имени пользователя и пароля, но невозможно войти в систему даже после заполнения правильных учетных данных.

Это класс SecurityConfig.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()

                .addFilter(digestAuthFilter())
                .exceptionHandling()
                .authenticationEntryPoint(digestEntryPoint())
                .and()



                .formLogin()
                .defaultSuccessUrl("/secure")
                .permitAll()
                ;
    }

@Bean
    DigestAuthenticationFilter digestAuthFilter() throws Exception {

        DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter();

        digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean());
        digestAuthenticationFilter.setAuthenticationEntryPoint(digestEntryPoint());
        digestAuthenticationFilter.setPasswordAlreadyEncoded(true);
        return digestAuthenticationFilter;
    }

    @Bean
    DigestAuthenticationEntryPoint digestEntryPoint() {
        DigestAuthenticationEntryPoint bauth = new DigestAuthenticationEntryPoint();
        bauth.setRealmName("Digest Realm");
        bauth.setKey("MySecureKey");
        return bauth;
    }

    @Override
    @Bean
    public UserDetailsService userDetailsServiceBean() {
        InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
        inMemoryUserDetailsManager.createUser(User.withUsername("user").password("{noop}user").authorities("USER").build());
        return inMemoryUserDetailsManager;
    }
}

Это класс для контроллера покоя для отображения.

@RequestMapping(value = "/")
public class TestController {

    @RequestMapping(value = "/secure")
    public String secure() {
        return "You are authorize to access this page. This is secure page. ";
    }
    @RequestMapping(value = {"/home", "/"})
    public String home() {
        return "This is public page. No need of authentication";
    }
}

Я ожидаю, что он предоставит доступ, предоставив правильные учетные данныеи перенаправить на защищенный "/ secure" URL.

...