Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >当使用oracle验证用户时,org.springframework.security.authentication.InternalAuthenticationServiceException:

当使用oracle验证用户时,org.springframework.security.authentication.InternalAuthenticationServiceException:
EN

Stack Overflow用户
提问于 2020-08-22 22:57:25
回答 1查看 251关注 0票数 0

亲爱的,

我正在尝试使用oracle db验证用户。

这是我的安全上下文spring配置文件:

代码语言:javascript
代码运行次数:0
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">



      <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="select user_name username, password,   'true' enabled from USERS  where user_name=?"
                authorities-by-username-query="select u.user_name username, ur.authority from USERS u, USERS_ROLES ur where u.user_id = ur.user_id and u.user_name = ?"/>
            <security:password-encoder ref="passwordEncoder" />
        </security:authentication-provider>
      </security:authentication-manager>
    
    
    

    <security:http use-expressions="true">
        <security:intercept-url pattern="/CreateOffer" access="isAuthenticated()"  />
        <security:intercept-url pattern="/docreate" access="isAuthenticated()" />
        <security:intercept-url pattern="/static/**" access="permitAll" />
        <security:intercept-url pattern="/" access="permitAll" />
        <security:intercept-url pattern="/newaccount" access="permitAll" />
        <security:intercept-url pattern="/createaccount" access="permitAll" />
        <security:intercept-url pattern="/createaccountvalidation" access="permitAll" />
        <security:intercept-url pattern="/login" access="permitAll" />
        <security:intercept-url pattern="/ShowOffer" access="permitAll" />
        <security:intercept-url pattern="/**" access="denyAll" />
        <security:form-login login-page="/login"
            login-processing-url="/login" username-parameter="custom_username"
            password-parameter="custom_password"
            authentication-failure-url="/login?error=true" />
    </security:http>

    <jee:jndi-lookup jndi-name="jdbc/myoracle"
        id="dataSource" expected-type="javax.sql.DataSource">
    </jee:jndi-lookup>
    
    <bean id="passwordEncoder"
        class="org.springframework.security.crypto.password.NoOpPasswordEncoder">
    </bean>
</beans>

用户:

代码语言:javascript
代码运行次数:0
复制
Name      Null? Type          
--------- ----- ------------- 
USER_ID         NUMBER(10)    
USER_NAME       VARCHAR2(50)  
PASSWORD        VARCHAR2(100) 
ENABLED         CHAR(1)       
EMAIL           VARCHAR2(50)  

Users_roles:

代码语言:javascript
代码运行次数:0
复制
Name         Null? Type         
------------ ----- ------------ 
USER_ROLE_ID       NUMBER       
USER_ID            NUMBER       
AUTHORITY          VARCHAR2(45) 

我相信错误即将到来,因为它无法将char (已启用的列)转换为布尔值。我已经查过了,但没有找到任何解决办法。即使是我已经硬编码‘真’作为启用的价值,但它仍然不起作用。

代码语言:javascript
代码运行次数:0
复制
Caused by: java.sql.SQLException: Fail to convert to internal representation
    at oracle.jdbc.driver.CharCommonAccessor.getBoolean(CharCommonAccessor.java:185)

完整的错误消息:

代码语言:javascript
代码运行次数:0
复制
 Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server version name:   Apache Tomcat/9.0.37
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server built:          Jun 30 2020 20:09:49 UTC
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server version number: 9.0.37.0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: OS Name:               Windows 10
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: OS Version:            10.0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Architecture:          amd64
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Java Home:             C:\Program Files\Java\jdk-12.0.2
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: JVM Version:           12.0.2+10
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: JVM Vendor:            Oracle Corporation
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: CATALINA_BASE:         D:\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: CATALINA_HOME:         C:\Program Files\Apache Software Foundation\Tomcat 9.0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dcatalina.base=D:\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 9.0
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dwtp.deploy=D:\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
    Aug 23, 2020 12:09:12 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dfile.encoding=Cp1252
    Aug 23, 2020 12:09:12 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    INFO: The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [C:\Program Files\Java\jdk-12.0.2\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jdk-12.0.2/bin/server;C:/Program Files/Java/jdk-12.0.2/bin;c:\app\Sanjay\product\11.2.0\dbhome_1\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Java\jdk-12.0.2\bin;C:\Program Files\Apache Software Foundation\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin;C:\Program Files\Apache Software Foundation\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin;C:\Users\Sanjay\AppData\Local\Microsoft\WindowsApps;;C:\WINDOWS\system32;;.]
    Aug 23, 2020 12:09:13 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-nio-8686"]
    Aug 23, 2020 12:09:13 PM org.apache.catalina.startup.Catalina load
    INFO: Server initialization in [782] milliseconds
    Aug 23, 2020 12:09:13 PM org.apache.catalina.core.StandardService startInternal
    INFO: Starting service [Catalina]
    Aug 23, 2020 12:09:13 PM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet engine: [Apache Tomcat/9.0.37]
    Aug 23, 2020 12:09:13 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
    WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [153] milliseconds.
    Aug 23, 2020 12:09:15 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance
    WARNING: Name = myoracle Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "20" for "maxActive" property, which is being ignored.
    Aug 23, 2020 12:09:15 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance
    WARNING: Name = myoracle Property maxWait is not used in DBCP2 , use maxWaitMillis instead. maxWaitMillis default value is -1. You have set value of "-1" for "maxWait" property, which is being ignored.
    Aug 23, 2020 12:09:15 PM org.apache.jasper.servlet.TldScanner scanJars
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    Aug 23, 2020 12:09:15 PM org.apache.catalina.core.ApplicationContext log
    INFO: No Spring WebApplicationInitializer types detected on classpath
    Aug 23, 2020 12:09:15 PM org.apache.catalina.core.ApplicationContext log
    INFO: Initializing Spring DispatcherServlet 'offer'
    Aug 23, 2020 12:09:15 PM org.springframework.web.servlet.FrameworkServlet initServletBean
    INFO: Initializing Servlet 'offer'
    Aug 23, 2020 12:09:15 PM org.springframework.security.core.SpringSecurityCoreVersion performVersionChecks
    INFO: You are running with Spring Security Core 5.2.6.RELEASE
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.SecurityNamespaceHandler <init>
    INFO: Spring Security 'config' module version is 5.2.6.RELEASE
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'isAuthenticated()' for /CreateOffer
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'isAuthenticated()' for /docreate
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /static/**
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /newaccount
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /createaccount
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /createaccountvalidation
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /login
    Aug 23, 2020 12:09:15 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'permitAll' for /ShowOffer
    Aug 23, 2020 12:09:16 PM org.springframework.security.config.http.FilterInvocationSecurityMetadataSourceParser parseInterceptUrlsForFilterInvocationRequestMap
    INFO: Creating access control expression attribute 'denyAll' for /**
    Aug 23, 2020 12:09:16 PM org.springframework.security.config.http.HttpSecurityBeanDefinitionParser checkFilterChainOrder
    INFO: Checking sorted filter chain: [Root bean: class [org.springframework.security.web.context.SecurityContextPersistenceFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 200, Root bean: class [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 400, Root bean: class [org.springframework.security.web.header.HeaderWriterFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 500, Root bean: class [org.springframework.security.web.csrf.CsrfFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 700, <org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0>, order = 1200, Root bean: class [org.springframework.security.web.savedrequest.RequestCacheAwareFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 1900, Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.security.config.http.HttpConfigurationBuilder$SecurityContextHolderAwareRequestFilterBeanFactory#0; factoryMethodName=getBean; initMethodName=null; destroyMethodName=null, order = 2000, Root bean: class [org.springframework.security.web.authentication.AnonymousAuthenticationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 2300, Root bean: class [org.springframework.security.web.session.SessionManagementFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 2400, Root bean: class [org.springframework.security.web.access.ExceptionTranslationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 2500, <org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0>, order = 2600]
    Aug 23, 2020 12:09:16 PM org.hibernate.validator.internal.util.Version <clinit>
    INFO: HV000001: Hibernate Validator 6.1.5.Final
    Aug 23, 2020 12:09:17 PM org.springframework.security.provisioning.JdbcUserDetailsManager initDao
    INFO: No authentication manager set. Reauthentication of users when changing passwords will not be performed.
    Aug 23, 2020 12:09:17 PM org.springframework.security.web.DefaultSecurityFilterChain <init>
    INFO: Creating filter chain: any request, [org.springframework.security.web.context.SecurityContextPersistenceFilter@299c86f0, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4fbed6fc, org.springframework.security.web.header.HeaderWriterFilter@1b1d93e9, org.springframework.security.web.csrf.CsrfFilter@129b0ed, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4ccf1d3e, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@75ff2b6d, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@20a7ce0, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4ee80a94, org.springframework.security.web.session.SessionManagementFilter@7afac89a, org.springframework.security.web.access.ExceptionTranslationFilter@76d220eb, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@276eafad]
    Aug 23, 2020 12:09:17 PM org.springframework.security.config.http.DefaultFilterChainValidator checkLoginPageIsntProtected
    INFO: Checking whether login URL '/login' is accessible with your configuration
    Aug 23, 2020 12:09:17 PM org.springframework.web.servlet.FrameworkServlet initServletBean
    INFO: Completed initialization in 2225 ms
    Aug 23, 2020 12:09:17 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-nio-8686"]
    Aug 23, 2020 12:09:17 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in [4343] milliseconds
    Aug 23, 2020 12:09:25 PM org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter doFilter
    SEVERE: An internal error occurred while trying to authenticate the user.
    org.springframework.security.authentication.InternalAuthenticationServiceException: PreparedStatementCallback; uncategorized SQLException for SQL [select user_name username, password, 'true' enabled from USERS where user_name=?]; SQL state [99999]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation
        at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:123)
        at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144)
        at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:175)
        at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:195)
        at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:95)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:141)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:835)
    Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select user_name username, password, 'true' enabled from USERS where user_name=?]; SQL state [99999]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:763)
        at org.springframework.security.provisioning.JdbcUserDetailsManager.loadUsersByUsername(JdbcUserDetailsManager.java:150)
        at org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.loadUserByUsername(JdbcDaoImpl.java:181)
        at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:108)
        ... 41 more
    Caused by: java.sql.SQLException: Fail to convert to internal representation
        at oracle.jdbc.driver.CharCommonAccessor.getBoolean(CharCommonAccessor.java:185)
        at oracle.jdbc.driver.T4CCharAccessor.getBoolean(T4CCharAccessor.java:697)
        at oracle.jdbc.driver.OracleResultSetImpl.getBoolean(OracleResultSetImpl.java:640)
        at org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet.getBoolean(DelegatingResultSet.java:358)
        at org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet.getBoolean(DelegatingResultSet.java:358)
        at org.springframework.security.provisioning.JdbcUserDetailsManager.lambda$loadUsersByUsername$0(JdbcUserDetailsManager.java:155)
        at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94)
        at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:61)
        at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:679)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
        ... 48 more

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 02:41:02

我使用char作为启用的数据类型,char被转换为java.lang.String或oracle.sql.CHAR。

我把它改为数字,因为数字可以转换成布尔值,它工作得很好。

请使用以下连结作完整参考:

https://docs.oracle.com/cd/E11882_01/java.112/e16548/apxref.htm#JJDBC28906

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63544232

复制
相关文章
Groovy 添加带注释的Map构造函数
从Groovy的早期开始,我们可以创建POGO(Plain Old Groovy Objects)类,它们将具有带有Map参数的构造函数。 Groovy在生成的类中自动添加构造函数。我们可以使用命名参数来创建POGO的实例,因为Map参数构造函数。 这只有在我们不添加自己的构造函数且属性不是最终的时才有效。从Groovy 2.5.0开始,我们可以使用@MapConstrutor AST转换注释来添加带有Map参数的构造函数。使用注释我们可以有更多选项来自定义生成的构造函数。例如,我们可以让Groovy使用Map参数生成构造函数,并添加我们自己的构造函数。 属性也可以是final,我们仍然可以使用带有Map参数的构造函数。
白石
2019/08/23
1.1K0
Java里的构造函数(构造方法)
本文转载之https://www.cnblogs.com/livterjava/p/4709561.html
用户7886150
2021/01/31
2.5K0
@Autowired的使用:推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
java架构师
2019/06/13
2K0
JAVA & .NET创建对象构造函数调用顺序
基类静态初始化块——当前类静态初始化块——基类初始化块——基类构造函数——当前类初始化块——当前类构造函数
雪飞鸿
2019/03/08
1.1K0
java构造函数调用另一个构造函数_java中的构造函数
* 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
用户7886150
2021/04/29
4.5K0
java scanner构造函数_使用Scanner作为构造函数的参数的Java
这是一个学校任务的问题,这就是为什么我这样做的原因。使用Scanner作为构造函数的参数的Java
用户7886150
2021/04/26
2.8K0
Java 构造函数的详解
我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。那么我们在java里面怎么在对象一旦创建就赋值呢?
全栈程序员站长
2022/09/08
5610
[ Java学习基础 ] Java构造函数
   构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用。 Java构造方法的特点如下: 构造方法名必须与类名相同。 构造方法没有任何返回值,包括void。 构造方法只能与new运算符结合使用。 示例代码如下: 1 //Rectangle.java文件 2 package com.a51work6; 3 4 // 矩形类 5 public class Rectangle { 6 7 // 矩形宽度 8 int wi
Kevin_Zhang
2018/05/22
1.3K0
通过工厂函数、构造函数创建对象
当我们有多个变量的结构非常类似时,如下所示,反复书写结构过于麻烦,我们可以定义一个工厂函数来创建对象
很酷的站长
2022/12/21
7890
通过工厂函数、构造函数创建对象
什么是java构造函数_什么是java构造函数
构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值。构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过构造函数初始化。一个类中如果没有定义过构造函数,那么该类会有一个默认的空参数构造函数。如果在类中定义了指定的构造函数,那么该类中的默认构造函数就没有了。
全栈程序员站长
2022/09/08
1.2K0
js 中的构造函数,构造函数作用,构造函数和普通函数的区别
函数的定义方式: 1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。 2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
全栈程序员站长
2022/10/04
3.5K0
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ;
韩曙亮
2023/03/27
4.1K0
Groovy 元组构造函数创建
Groovy 1.8添加了@TupleConstructor注释。 通过这个注释,我们可以在编译时自动创建一个元组构造函数。 因此构造函数可以在编译的类中找到。 对于类中的每个属性,将使用默认值创建构造函数中的参数。 类中定义的属性的顺序还定义了构造函数中参数的顺序。 因为参数具有默认值,所以我们可以使用Groovy语法,并在使用构造函数时将参数留在参数列表的末尾。
白石
2019/09/18
1.3K0
@Autowired的使用--Spring规范解释,推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies.
ydymz
2018/09/10
4.2K0
Java复制构造函数
----------------------------------------------------------------------------------
用户7886150
2020/12/15
9610
java构造函数方法声明无效_如何构造函数
Java构造函数,也叫构造方法,是JAVA中一种特殊的函数。与函数名相同,无返回值。
全栈程序员站长
2022/10/05
1.7K0
C++核心准则C.51:使用委托构造函数实现所有构造函数的共通动作
C.51: Use delegating constructors to represent common actions for all constructors of a class C.51:使用委托构造函数实现所有构造函数的共通动作
面向对象思考
2020/03/25
6890
【说站】js创建构造函数的注意点
推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。
很酷的站长
2022/11/24
7230
【说站】js创建构造函数的注意点
LeetCode - 所有可能的路径
我又重新开始更新LeetCode了,以后工作日更新LeetCode,周末更新东野圭吾的小说
晓痴
2019/07/24
7490
LeetCode - 所有可能的路径
java构造代码块,构造函数和普通函数的区别和调用时间
在这里我们谈论一下构造代码块,构造函数和普通函数的区别和调用时间。 构造代码块:最早运行,比构造函数运行的时间好要提前,和构造函数一样,只在对象初始化的时候运行。 构造函数:运行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。 普通函数:不能自动调用,需要对象来调用,例如a.add(); 如果只看代码运行先后顺序的话:构造代码块>构造函数>普通函数 下面给一个程序
用户3030674
2018/09/14
1.5K0
java构造代码块,构造函数和普通函数的区别和调用时间

相似问题

UIKeyboardWillChangeFrameNotification并非总是被调用

152

CallListener onCallProgressing()并非总是被调用

10

Viewpager Fragment 1 onCreateView并非总是被调用

19

从NSSharingService扩展调用FinderSync

14

并非总是调用NSMenuItem自定义视图drawRect

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档