我有spring安全应用程序,希望启用注释安全性(授权前和授权后)。 我也有小样本应用程序,我已经实现了它。一切正常。 但是将配置移动到主应用程序失败了。控制台中没有错误。但注释不起作用。看起来,他们根本就没有被贬低。 所有配置和组件版本都完全相同。
有
<security:global-method-security secured-annotations="enabled" />
安全上下文和servlet上下文中的记录。 但是@Controller方法没有@Service方法在主应用程序中使用注释保护。
我该怎么调试呢?
解决!
从&lt;切换后global-method-security secured-annotations =&#34; enabled&#34; /&GT;至 前/后注释工作正常。
答案 0 :(得分:6)
将org.springframework.security的日志级别设置为debug。在使用注释调用方法时,您可以找到指示正在应用拦截器的日志消息,尤其是查找: DEBUG MethodSecurityInterceptor
更新: 这意味着您的示例应用程序和主应用程序之间存在一些配置差异 一些指向要寻找:
&lt; global-method-security&gt;标记需要与Spring MVC配置位于相同的上下文中,否则您的控制器将不会进行后期处理。参考: http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/faq.html#faq-method-security-in-web-context
您可能需要预注释=“启用”,并设置expressionHandler。
确保标记&lt; global-method-security&gt;在应用程序上下文中
答案 1 :(得分:0)
您可以添加到您的application.yaml
:
logging.level.org.springframework.security: DEBUG
或添加到application.properties
:
logging.level.org.springframework.security=DEBUG
或使用WebSecurityConfig
添加到您的EnableWebSecurity
批注debug = true
:
@Configuration
@EnableWebSecurity(debug = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
// ...
}
答案 2 :(得分:0)
如果您只想知道哪个方法失败,只需为此异常过滤器设置日志级别:
logging.level.org.springframework.security.web.access.ExceptionTranslationFilter: DEBUG
它只会显示失败方法的堆栈跟踪,而不是不必要的垃圾邮件;-)