在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 重启后也能保持活动会话