当我禁用安全性时,我正在使用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控制台?
答案 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
祝你好运;)