当前位置: 首页 > 知识库问答 >
问题:

登录sql抛出Java . SQL . sqlexception:Spring Security中的列索引超出范围,3 > 2[重复]

微生阳平
2023-03-14

下面的代码是使用Spring Boot Security的Spring BootLogin配置。第一

==application.properties

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost/test?characterEncoding=utf8&serverTimezone=Asia/Seoul
spring.datasource.username = root
spring.datasource.password = password

spring.queries.users-query = SELECT username, password FROM blog_user WHERE username=?
spring.queries.roles-query = SELECT username, role FROM blog_user WHERE username=?

== Spring Security配置

@Value("${spring.queries.users-query}")
private String usersQuery;

@Value("${spring.queries.roles-query}")
private String rolesQuery;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // TODO Auto-generated method stub
        auth.jdbcAuthentication().usersByUsernameQuery(usersQuery).authoritiesByUsernameQuery(rolesQuery)
                .dataSource(dataSource).passwordEncoder(passwordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
        // TODO Auto-generated method stub
        http.csrf().disable()
            .authorizeRequests()
                .antMatchers("/" ,"/home*", "/js/**", "/css/**", "/icon/**", "/users/login", "/users/register").permitAll()
                .antMatchers("/users*", "/posts/**").hasAnyRole("USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/users/login").defaultSuccessUrl("/")
                .usernameParameter("username").passwordParameter("password")
                .and()
            .logout()
                .invalidateHttpSession(true)
                .clearAuthentication(true)
                .logoutSuccessUrl("/").and()
            .exceptionHandling().accessDeniedPage("/error/403");
}

但登录行抛出以下异常。

Caused by: java.sql.SQLException: Column Index out of range, 3 > 2. 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.15.jar:8.0.15]

我知道这个异常是从sql PreparedStatementCallback方法抛出的。但是恐怕我不知道< code > spring . queris . users-query 语句与Spring Security部分的关系,所以我可以修复这个preparedstatement参数。我是初学春安的。

共有1个答案

霍建章
2023-03-14

问题是,SQL 查询在 3 个不同的列中搜索 3 个值,而在所选表中仅找到 2 列。来自 application.properties 文件的查询是唯一的查询?

我想这对你也有帮助。

也许您可以在这里打印整个stacktrac,并打印sql语句以及USERS和ROLES表的结构。

 类似资料:
  • 我正在使用spring 4,我想使用spring security 3来控制我的登录表单。因此,我在数据库中有以下表格: 用户表 : 角色表: 和users_roles 我的spring-security配置文件包含以下几行: 当我尝试连接时,我有以下错误: 你能告诉我我的配置有什么问题吗? 谢谢你

  • 问题内容: 我决定通过添加身份验证使用和数据库来修改我的应用程序。在使用XML 和XML 进行普通身份验证之前。工作正常。 我看起来像这样 但是当我尝试进行身份验证时,我遇到了异常 XML文件中的语法有什么问题? 问题答案: Spring Security希望用户查询按顺序列出三列: 用户名 密码 启用(布尔值) 你没有最后一个。如果您的数据库中没有等效的“启用”功能,则可以使用常量。

  • 问题内容: 我正在使用spring 4,并且想使用spring security 3来控制我的登录表单。所以我在数据库中有以下表格: 用户表: 角色表: 和 users_roles 我的 spring-security配置 文件具有以下几行: 当我尝试连接时,出现以下错误: 您能告诉我我的配置有什么问题吗? 谢谢 问题答案: 在和混合起来。将第一个SQL查询移至第二个,反之亦然。 也许您也想更改为

  • 在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)在com.microsoft.sqlserver.jdbc.SQLServerPrearedStatement.setterGetParam(SQLServerPrearedStatement.java:9

  • 我有一个bean,我用它作为传输对象。bean的类定义为- 我正在使用这个bean,在带有Model属性注释的Spring控制器中。对于JSP,我有JSTL。我已经用这样的字段填充了JSP。 当我提交表单时,我得到Java . lang . indexoutofboundsexception:Index:0,Size: 0。

  • 问题内容: 我在读取CSV文件时遇到此错误(无标题,3列,第二和第三字符串): 这是下面代码的一部分。坚持起来简直是愚蠢的简单事情,但是对于如何工作我只是空白。我是编码的新手,但是之前已经处理过csv模块,并且从来没有遇到过这方面的问题,只是在记事本中制作了一些测试csv文件,以查看是否可以从相同的代码中读取它,并且可以。我不知道。 问题答案: 尝试检查空白行。另外,请避免将其用作变量名。是打开的