如何调试 Spring Security 授权注解?

Posted

技术标签:

【中文标题】如何调试 Spring Security 授权注解?【英文标题】:How to debug Spring Security authorization annotations? 【发布时间】:2015-04-19 03:19:55 【问题描述】:

我有 Spring Security 应用程序,希望在其中启用注释安全性(授权前和授权后)。 我也有一个小的示例应用程序,我已经在其中实现了它。一切正常。 但是将配置移动到主要应用程序失败了。控制台没有错误。但是注释不起作用。看来,它们根本没有被阅读。 所有配置和组件版本完全相同。

<security:global-method-security secured-annotations="enabled" /> 

security-context 和 servlet-context 中的记录。 但是在主应用程序中,@Controller 方法和 @Service 方法都不受注解的保护。

如何调试它?

解决了!

切换到 前/后注释工作正常。

【问题讨论】:

在工作示例中,我看到日志记录:INFO:org.springframework.security.config.method.GlobalMethodSecurityBeanDefinitionParser - 启用了表达式。但在主应用程序中我找不到它 sts 用 "5 Spring AOP marker at this line" 行标记 【参考方案1】:

设置 org.springframework.security 的日志级别为调试。在使用注释调用方法时,您可以找到指示正在应用拦截器的日志消息,尤其是查找: 调试方法安全拦截器

更新: 这意味着您的示例应用程序和主应用程序之间存在一些配置差异 一些需要寻找的指针:

标签需要和你的 Spring MVC 配置在同一个上下文中,否则你的控制器将不会被后处理。参考: http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/faq.html#faq-method-security-in-web-context

您可能需要 pre-post-annotations="enabled",并设置 expressionHandler。

确保标签 在应用程序上下文中

【讨论】:

在示例应用程序中我看到 MethodSecurityInterceptor 和 ExpressionBasedPostInvocationAdvice 。但在主应用程序中没有一个(只有intercept.FilterSecurityInterceptor)。 问题是,如何调试未使用注释的原因。 你是对的!前后注释而不是安全作品。【参考方案2】:

您可以添加到您的application.yaml:

logging.level.org.springframework.security: DEBUG

或加application.properties:

logging.level.org.springframework.security=DEBUG

或添加到您的WebSecurityConfig 注释EnableWebSecuritydebug = true

@Configuration
@EnableWebSecurity(debug = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 
  // ...

【讨论】:

【参考方案3】:

如果您只想知道哪个方法失败了,只需为此异常过滤器设置日志记录级别:

logging.level.org.springframework.security.web.access.ExceptionTranslationFilter: TRACE

它只会显示失败方法的堆栈跟踪,而不是不必要的垃圾日志;-)

【讨论】:

这实际上是一个很好的应用程序,在维护良好的应用程序中,我们不想看到超出我们需要的东西,我想知道为什么人们只是在整个安全包上启用调试......但是有只有trace 日志,所以应该是: TRACE

以上是关于如何调试 Spring Security 授权注解?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security应用开发(20)基于方法的授权使用@RolesAllowed注解

Spring Security应用开发(21)基于方法的授权使用@Secured注解

Spring Security应用开发(17)基于方法的授权评估

spring-security-oauth2注解详解

spring-security-oauth2注解详解

Grails 中的 Spring Security 提供授权