如何在不使用"权限的情况下使用Spring Security的JDBC身份验证"?

时间:2015-04-07 19:15:55

标签: spring postgresql spring-security

我对当局有疑问。

  

原因:PreparedStatementCallback;糟糕的SQL语法[选择   用户名,权限来自权限,用户名=?];嵌套   异常是org.postgresql.util.PSQLException:错误:关系   “当局”不存在职位:32

我不想实现权限,但不知道如何在Spring中的JavaConfig中禁用它。

@Override
protected void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery(
                    "select username,password,'true' as enabled from users where username=?")
            .passwordEncoder(new ShaPasswordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
}

1 个答案:

答案 0 :(得分:2)

据我所知,您无法在Spring Security中使用JavaConfig停用权限机制,但您可以覆盖用于获取权限数据的查询以达到相同的效果。

使用Spring Security的JDBC身份验证时,会对数据库方案做出某些假设来检索身份验证数据。您已经通过调用usersByUsernameQuery()覆盖了用于获取示例中的用户数据的查询。

我设法通过覆盖查询来有效地禁用整个权限检查,以获取这样的权限数据(如Craig Walls的“Spring in Action”中所述):

@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder)
        throws Exception {

    authenticationManagerBuilder.jdbcAuthentication().dataSource(dataSource)
            .usersByUsernameQuery(
                    "SELECT username, password, enabled FROM users WHERE username=?")
            .authoritiesByUsernameQuery(
                    "SELECT username, 'ROLE_USER' FROM users WHERE username=?");
}