Spring Boot集成Security使用数据库用户角色权限用户名问题

来源:互联网 发布:单例模式 java csdn 编辑:程序博客网 时间:2024/06/06 01:36

问题描述

代码

package com.springboot.in.action.daoimport java.util.Listimport com.springboot.in.action.entity.Userimport org.springframework.data.jpa.repository.Queryimport org.springframework.data.repository.CrudRepositoryimport scala.language.implicitConversionstrait UserDao extends CrudRepository[User, Integer] {  def findAll(): List[User] // JavaConversions  def save(u: User): User  def findOne(id: Integer): User  @Query(value = "select * from `user` where `username` = 1? limit 1", nativeQuery = true)  def findByUsername(username: String): User}

报错日志

Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:261)    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:488)    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)    at com.sun.proxy.$Proxy97.findByUsername(Unknown Source)    at com.springboot.in.action.service.LightSwordUserDetailService.loadUserByUsername(LightSwordUserDetailService.scala:25)    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114)    ... 54 common frames omittedCaused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79)    at org.hibernate.loader.Loader.getResultSet(Loader.java:2117)    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900)    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876)    at org.hibernate.loader.Loader.doQuery(Loader.java:919)    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)    at org.hibernate.loader.Loader.doList(Loader.java:2617)    at org.hibernate.loader.Loader.doList(Loader.java:2600)    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429)    at org.hibernate.loader.Loader.list(Loader.java:2424)    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:336)    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1967)    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322)    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125)    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:529)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:497).....Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''jack'' at line 1    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)    at com.mysql.jdbc.Util.getInstance(Util.java:408)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501)    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:497)    at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:138)    at com.sun.proxy.$Proxy100.executeQuery(Unknown Source)    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)    ... 98 common frames omitted

原因分析

sql语法手误。1?这地方写错了,应该是?1。这在敲代码的时候,手速一旦稍有不慎,就会导致前后顺序颠倒,而导致输入错误。这个虽然说是“低级错误”,但是错误搞起来,确实有时候很难想到这个你从来不会认为出错的地方。

@Query(value = "select * from `user` where `username` = 1? limit 1", nativeQuery = true)  def findByUsername(username: String): User

解决方案

@Query(value = "select * from `user` where `username` = ?1 limit 1", nativeQuery = true)  def findByUsername(username: String): User
阅读全文
0 0