无法通过"认证要求"登录我的H2控制台弹出窗口

时间:2018-05-14 05:50:32

标签: java spring-security forms-authentication

当我禁用安全性时,我正在使用H2内存数据库,其中存储了一些用户数据。

然而,当我启用安全性时,我有这个身份验证弹出窗口,而且我没有正确的用户名和密码来完成它。

每当我输入身份验证弹出窗口并单击" OK"时,我会注意到,SQL消息将显示: Hibernate:选择userinfo0_.user_id为user_id1_1_,userinfo0_.password为password2_1_,userinfo0_.user_name为user_nam3_1_,来自user_info userinfo0_,其中userinfo0_.user_name =? 表格和列信息与我的H2表格设置相匹配。我认为这应该表明它从我的数据库中寻找。

然而,即使我输入正确的用户名和密码,它也不会让我进去。

以下是我的配置类

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userInfoService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
                .requestMatchers().antMatchers("/login", "/logout", "/oauth/authorize", "/oauth/confirm_access")
                .and()
                .authorizeRequests()
                .antMatchers("/h2","/h2_console/**").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage("/login").permitAll();
        http.csrf().disable();
        http.headers().frameOptions().disable();
        // @formatter:on
    }

    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password("user").roles("USER")
                .and()
                .withUser("admin").password("admin").roles("ADMIN");
    }


    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.authenticationProvider(authenticationProvider());
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider(){
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(this.userInfoService);
        authenticationProvider.setPasswordEncoder(passwordEncoder());
        return authenticationProvider;
    }

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

我有多个用户存储在数据库中,有些用户使用明文密码,而另一位用户使用上面编码器加密密码。

我唯一怀疑的是数据库中的用户没有admin角色来访问/ h2路径(H2控制台)。

无论如何,我应该如何通过此弹出窗口访问我的h2控制台?

2 个答案:

答案 0 :(得分:0)

自从我使用h2以来已经有一段时间了。我很确定您不必在数据库中使用您的凭据。您将需要在application.properties文件中设置凭据。

mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
    @Override
    public void onInfoWindowClick(Marker marker) {
        int title = Integer.parseInt(marker.getTitle());
        Log.d("Result", String.valueOf(marker));
        //pass these value in two diffrent activities to update sqlite database
        Intent a = new Intent(MapsActivity.this, Abc.class);
        a.putExtra("customer_id", title);
        startActivity(a);
}

尝试使用用户名spring.h2.console.enabled=true spring.h2.console.path=/h2 spring.datasource.url=jdbc:h2:mem:yourdb;MODE=Oracle spring.datasource.username=sa spring.datasource.password= 和空密码登录。

答案 1 :(得分:0)

csrf().disble() 可能需要成为在 http 调用的第一个方法之一。 ...当我在开始时添加它时,我不再需要进行身份验证,也许有一天我当前的文件可能会帮助某人:

http.cors().and().httpBasic()
            .and().csrf().disable()
            .authorizeRequests()
            .antMatchers("/nonRegistered/**").permitAll()
            .antMatchers("/person/**").hasAuthority("USER")
            .antMatchers("/doctor/**").hasAuthority("DOCTOR")
            .antMatchers("/accommodation/**").hasAuthority("ACCOMMODATION")
            .antMatchers("/borderPatrol/**").hasAuthority("BORDERPATROL")
            .antMatchers("/console/**").permitAll() // h2 console link
            .antMatchers("/admin/**").hasAuthority("ADMIN")
            .anyRequest().fullyAuthenticated()

    ;
    http.headers().frameOptions().disable();// needed to h2 console to work

祝你好运;)