17

I have spring security application in which want to enable annotations security (pre and post authorization). I also have small sample application in which i have implemented it already. Everything works. But moving configs to main applications failed. There is no errors in console. But annotations do not work. It seems, they are not readed at all. All configuration and component versions are completely the same.

There are

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

records in security-context and servlet-context. But neither @Controller methods no @Service methods are secured with annotation in main application.

How can i debug it?

Solved!

After switch from < global-method-security secured-annotations="enabled" /> to pre/post annotations works fine.

Valeriy
  • 1,365
  • 3
  • 18
  • 45
Alexander
  • 305
  • 1
  • 2
  • 7
  • in working sample i see log record: INFO : org.springframework.security.config.method.GlobalMethodSecurityBeanDefinitionParser - Expressions were enabled. But in main application i cannot find it – Alexander Feb 18 '15 at 10:11
  • sts marks with "5 Spring AOP marker at this line" line – Alexander Feb 18 '15 at 10:34

3 Answers3

17

You can add to your application.yaml:

logging.level.org.springframework.security: DEBUG

Or add to application.properties:

logging.level.org.springframework.security=DEBUG

Or add to your WebSecurityConfig annotation EnableWebSecurity with debug = true:

@Configuration
@EnableWebSecurity(debug = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  // ...
}
Valeriy
  • 1,365
  • 3
  • 18
  • 45
7

Set the log level of org.springframework.security to debug. On invoking the method with annotations, you can find log messages that indicate interceptor being applied, especially look for: DEBUG MethodSecurityInterceptor

Updated: That means there is some config difference between your sample app and main app Some pointers to look for:

charybr
  • 1,888
  • 24
  • 29
  • in sample application i see MethodSecurityInterceptor and ExpressionBasedPostInvocationAdvice . but in main application there are no one of them (only intercept.FilterSecurityInterceptor). – Alexander Feb 18 '15 at 09:37
  • the question was, how can i debug the reasons annotations are not used. – Alexander Feb 18 '15 at 09:40
  • 1
    you are right! pre-post-annotations instead of secured works. – Alexander Feb 18 '15 at 11:25
2

In case you just want to know, which method failed, simply set the logging level for this exception filter:

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

It will only show the stack trace with the failed method and not spam your logs more than necessary ;-)

lilalinux
  • 2,903
  • 3
  • 43
  • 53
  • 1
    this is a good one actually, in well-maintained apps we don't want to see more than we need, I wonder why people just enable debug on the whole security package... but there are only `trace` logs, so it should be `: TRACE` – Artem Ptushkin Dec 10 '21 at 12:46