spring-projects / spring-projects/spring-security

@PostFilter throws an IllegalArgumentException on null return after migrating to @EnableMethodSecurity

Open
#19,280 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

status: waiting-for-triage type: bug
Dominant language
Java
Stars
9.6k
Forks
6.3k
Avg merge
2d 11h
Merged PRs (30d)
52

Description

Describe the bug
This might be either a bug, or a documentation gap.

On EnableGlobalMethodSecurity, PostFilter on a null return will return null from ExpressionBasedPostInvocationAdvice.

On EnableMethodSecurity, PostFilterAuthorizationMethodInterceptor calls DefaultMethodSecurityExpressionHandler.filter which throws an IllegalArgumentException.

To Reproduce

@Configuration
@EnableMethodSecurity
class SecurityConfig {
}
@Service
class MyService {
    @PostFilter("filterObject != null")
    public List<Object> someMethod() {
        return null;
    }
}

Call "someMethod()". It will throw an exception.

Switch to the legacy configuration:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
class SecurityConfig {
}

Call "someMethod()" again. It will return null.

Expected behavior

Either:

  1. EnableMethodSecurity should preserve the legacy behavior from EnableGlobalMethodSecurity and return null when a PostFilter method returns null

or

  1. The migration / PostFilter documentation should state that null return values aren't supported, and that this is different from the legacy EnableGlobalMethodSecurity.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with PostFilterAuthorizationMethodInterceptor and DefaultMethodSecurityExpressionHandler, then compare their null handling with ExpressionBasedPostInvocationAdvice under the legacy configuration. Reproduce the example with @EnableMethodSecurity and @EnableGlobalMethodSecurity; done means the null-return behavior is resolved consistently or the documented migration behavior is made explicit.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
authorization, security
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.