如何在客户端上使用BCrypt来使用RESTful Web服务?

时间:2019-04-15 11:28:08

标签: rest web-services spring-boot client bcrypt

我已经构建了一个Spring Boot应用程序,并使用BCryptPasswordEncoder对密码进行编码。我还有一个“数据库和登录”屏幕,所有用户都使用BCryptPasswordEncoder进行了身份验证。

我有一个文件夹“ admin”,“ admin”中的所有内容都必须经过身份验证。我在这个“ admin”包中创建了一个RestController,它依次为我返回了一些数据。

Spring Boot应用程序必须处理登录屏幕中的用户登录以及来自客户端的RESTful调用。

我正在尝试建立一个使用RESTful Web服务的客户端,但是无法通过BCrypt身份验证。

我尝试了各种方法在客户端上实现BCryptPasswordEncoder,但始终会获得“未通过身份验证”,否则它将返回登录屏幕作为JSON响应数据,这当然不是我想要的。

主要的Spring Boot应用程序:

git flow feature finish "feature-name"

我在另一个Spring Boot应用程序(客户端)中拥有这个:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    SecureAuthenticationSuccessHandler secureAuthenticationSuccessHandler;

    @Autowired
    CustomUserDetailsService customUserDetailsService;

    private String publicResources[] = new String[]{"/", "/assets/**", "/images/**", "/webjars/**"};
    private String privateResources[] = new String[]{"/admin/**"};

    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("restclient").password("restpassword").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
                .antMatchers(publicResources).permitAll()
                .antMatchers(privateResources).hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .failureUrl("/login?error=true")
                        .usernameParameter("username")
                        .passwordParameter("password")
                        .successHandler(secureAuthenticationSuccessHandler)
                .and()
                    .logout()
                        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                        .logoutSuccessUrl("/login")
                        .deleteCookies("JSESSIONID")
                        .invalidateHttpSession(true)
                .and()
                    .exceptionHandling().accessDeniedHandler(accessDeniedHandler());
    }

    @Override
    public void configure(AuthenticationManagerBuilder builder) throws Exception {
        builder.userDetailsService(customUserDetailsService);
    }


    public AccessDeniedHandler accessDeniedHandler(){
        return new CustomAccessDeniedHandler();
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(8);
        return bCryptPasswordEncoder;
    }

    @Autowired
    public void ConfigureGlobal (AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());
    }
}

0 个答案:

没有答案