在tomcat中显示Spring-security的SQL错误

Posted

技术标签:

【中文标题】在tomcat中显示Spring-security的SQL错误【英文标题】:Show SQL errors of Spring-security in tomcat 【发布时间】:2011-04-13 19:26:06 【问题描述】:

我有一个使用 spring-security 框架的 Web 应用程序。我建立了一个数据库来存储用户及其角色,但是tomcat给出了以下错误。

17-sep-2010 11:56:14 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
17-sep-2010 11:56:14 org.springframework.jdbc.support.SQLErrorCodesFactory <init>
INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, mysql, Oracle, PostgreSQL, Sybase]

有什么方法可以让我看到发生的错误?我在 tomcat 和 mysql 日志中找不到任何内容。

我使用的是 tomcat 7.0.2 和 mysql 5.1

更新: 添加了 log4j.properties

log4j.rootLogger=warn, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.logger.org.springframework.security=DEBUG
# log4j.logger.org.springframework.target=System.out

和 web.xml

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

还没有成功

【问题讨论】:

【参考方案1】:

此消息与您的应用程序运行时发生的错误无关:

INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]

而这只是Spring framework's JDBC support 记录的事实,即它已经加载了对翻译这些 SQL 数据库本机错误代码的支持,这些 SQL 数据库将转换为 Spring 的 DataAccessException 层次结构。此处的日志消息中没有发生错误。

如果您希望能够记录有关 Spring 正在做什么等的更多信息,框架 uses commons-logging 并且有多种方式可以配置实际输出。

【讨论】:

【参考方案2】:

我在 Spring Security 中使用了类似的东西 从 USER 中选择 * ...

更改 select * from user .. 就可以了

【讨论】:

【参考方案3】:

我收到上述错误的原因是我错过了第一个 sql 查询中的 1 as enabled 属性和 u.username 属性spring security config的第二个sql查询。

 <authentication-manager>
        <authentication-provider>
            <password-encoder hash="md5"/>
            <jdbc-user-service 
                data-source-ref="dataSource"
                users-by-username-query="select username, password, 1 as enabled from users where username = ?"
                authorities-by-username-query="select u.username, ur.user_role from USERS u, USERS_ROLE ur where u.sl_no = ur.user_id and u.username = ?"/>
          </authentication-provider>
        </authentication-manager>

        <b:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <b:property name="driverClassName" value="org.hsqldb.jdbcDriver" />
            <b:property name="url" value="jdbc:hsqldb:hsql://localhost/" />
            <b:property name="username" value="SA" />
            <b:property name="password" value="" />
        </b:bean>

希望这可以帮助解决此错误的人!!

【讨论】:

以上是关于在tomcat中显示Spring-security的SQL错误的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 和 spring-security 中的 Web 应用程序和 REST 服务 SSO

Tomcat8+Spring-Security 启用安全通道(https)的一步步实现

Spring-security:即使在 JVM 重启后也能保持活动会话

有啥方法可以强制在 spring-security 中的某些页面使用 https 吗?

JsessionId 没有显示在 url 中?

在tomcat上的grails spring security中登录用户的会话