为什么我没有从Spring Security获取日志?

时间:2014-02-17 15:21:53

标签: spring spring-security logback

我正在尝试测试放在Spring Controller中的方法上的@PreAuthorize标记。我没有收到有关Spring是否允许或不允许通话的决定的任何记录信息。目前我被允许进入一个方法,我想调试为什么我被允许,即使我没有这个角色。

我正在使用Spring Framework 3.2.3,Spring Security 3.1.4,Logback 1.0.13,Logback Spring 0.1.1。

这是我的回溯文件:

...
<appender name="MAIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>/logs/main_log.txt</file>
  <append>true</append>
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
     <level>TRACE</level>
  </filter>
  <encoder>
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | %p | %c %M | %m%n</pattern>
  </encoder>
  <rollingPolicy>
     <fileNamePattern>/logs/main_log.txt.%d</fileNamePattern>
  </rollingPolicy>
</appender>

<logger name="org.springframework" level="TRACE"/>

<logger name="my.package" level="TRACE"/>

<root level="WARN">
   <appender-ref="MAIN"/>
</root>

我在我的web.xml文件中正确设置了侦听器。我知道这是因为我从包my.package获取日志消息以及从第三方软件获取WARN消息。

关于如何看待@PreAuthorize注释做出决定的任何想法?

2 个答案:

答案 0 :(得分:3)

你的配置看起来很好,但不幸的是Spring使用了公共记录。按照有关如何使用SLF4J(+ log4j或logback)的官方文档。

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/overview.html#overview-not-using-commons-logging

只是不要添加commons-logging jar或者如果你使用Maven那么就像文档中所示那样。然后你需要在commons-logging和SLF4J(jcl-over-slf4j.jar)之间建立一座桥梁。

从我的(工作)配置切出:

<logger name="org.springframework" level="DEBUG" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</logger>

的pom.xml:

    <!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.5</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.13</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.13</version>
        <scope>runtime</scope>
    </dependency>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring-version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

答案 1 :(得分:-1)

为了使用Pre-PostAuthorize注释,必须在spring配置中启用它们,因为默认情况下它们是关闭的。

这是在使用global-method-security XML元素时启用这些注释的方法(有关详细信息,请参阅here):

<global-method-security pre-post-annotations="enabled"/>