我试图用oauth实现jwt。我正在使用h2进行数据库连接。我得到一个异常,说
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM USERS WHERE USERNAME=?]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" not found; SQL statement:
我的UserDdQueryClass是:
package com.pallavi.springbootoauth2jwt;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Repository;
@Repository //this annotation is to tell the spring that this class is to access data for user (DAO class)
public class UsersDbQuery {
@Autowired
private JdbcTemplate jdbcTemplate;
public UsersPojo getUserDetails(String username) {
Collection<GrantedAuthority> listOfgrantedAuthorities = new ArrayList<GrantedAuthority>();
String userSQLQuery = "SELECT * FROM USERS WHERE USERNAME=?";
List<UsersPojo> list = jdbcTemplate.query(userSQLQuery, new String[] { username },
(ResultSet rs, int rowNum) -> {
UsersPojo user = new UsersPojo();
user.setUsername(username);
user.setPassword(rs.getString("PASSWORD"));
return user;
});
if (list.size() > 0) {
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_SYSTEMADMIN");
listOfgrantedAuthorities.add(grantedAuthority);
list.get(0).setListOfgrantedAuthorities(listOfgrantedAuthorities);
return list.get(0);
}
return null;
}
}
我已经把Data.sql和Schema.sql放到application.properties中了,我正在使用intelligie idea,intelligie idea测试连接成功。
Here is the screen shot for the configuration of H2 database.
1条答案
按热度按时间2izufjch1#
我已经使用内存版本的H2复制了一个稍微简单一些的代码版本。我有一个修改过的UsersDBQuery类版本。我已经使用lombok删除了UsersPojo类中的大量样板代码。我很高兴与你分享这些代码。它在这个github reposory中:https://github.com/AdrianChallinorOsiris/UsersDbQuery.git
钥匙拿回家:Schema.sql和Data.sql必须全部小写!
其他带回家的物品:
所有的用户名和密码都是我生成的测试用户名和密码。你的名字没有被使用过。
希望这对你的旅程有所帮助
艾德里安