42
42
import org .springframework .security .core .SpringSecurityMessageSource ;
43
43
import org .springframework .security .core .context .SecurityContext ;
44
44
import org .springframework .security .core .context .SecurityContextHolder ;
45
+ import org .springframework .security .core .context .SecurityContextHolderStrategy ;
45
46
import org .springframework .security .core .userdetails .UserCache ;
46
47
import org .springframework .security .core .userdetails .UserDetails ;
47
48
import org .springframework .security .core .userdetails .UserDetailsService ;
@@ -93,6 +94,9 @@ public class DigestAuthenticationFilter extends GenericFilterBean implements Mes
93
94
94
95
private static final Log logger = LogFactory .getLog (DigestAuthenticationFilter .class );
95
96
97
+ private SecurityContextHolderStrategy securityContextHolderStrategy = SecurityContextHolder
98
+ .getContextHolderStrategy ();
99
+
96
100
private AuthenticationDetailsSource <HttpServletRequest , ?> authenticationDetailsSource = new WebAuthenticationDetailsSource ();
97
101
98
102
private DigestAuthenticationEntryPoint authenticationEntryPoint ;
@@ -192,9 +196,9 @@ private void doFilter(HttpServletRequest request, HttpServletResponse response,
192
196
logger .debug (LogMessage .format ("Authentication success for user: '%s' with response: '%s'" ,
193
197
digestAuth .getUsername (), digestAuth .getResponse ()));
194
198
Authentication authentication = createSuccessfulAuthentication (request , user );
195
- SecurityContext context = SecurityContextHolder .createEmptyContext ();
199
+ SecurityContext context = this . securityContextHolderStrategy .createEmptyContext ();
196
200
context .setAuthentication (authentication );
197
- SecurityContextHolder .setContext (context );
201
+ this . securityContextHolderStrategy .setContext (context );
198
202
this .securityContextRepository .saveContext (context , request , response );
199
203
chain .doFilter (request , response );
200
204
}
@@ -214,8 +218,8 @@ private UsernamePasswordAuthenticationToken getAuthRequest(UserDetails user) {
214
218
215
219
private void fail (HttpServletRequest request , HttpServletResponse response , AuthenticationException failed )
216
220
throws IOException , ServletException {
217
- SecurityContext context = SecurityContextHolder .createEmptyContext ();
218
- SecurityContextHolder .setContext (context );
221
+ SecurityContext context = this . securityContextHolderStrategy .createEmptyContext ();
222
+ this . securityContextHolderStrategy .setContext (context );
219
223
logger .debug (failed );
220
224
this .authenticationEntryPoint .commence (request , response , failed );
221
225
}
@@ -287,6 +291,17 @@ public void setSecurityContextRepository(SecurityContextRepository securityConte
287
291
this .securityContextRepository = securityContextRepository ;
288
292
}
289
293
294
+ /**
295
+ * Sets the {@link SecurityContextHolderStrategy} to use. The default action is to use
296
+ * the {@link SecurityContextHolderStrategy} stored in {@link SecurityContextHolder}.
297
+ *
298
+ * @since 5.8
299
+ */
300
+ public void setSecurityContextHolderStrategy (SecurityContextHolderStrategy securityContextHolderStrategy ) {
301
+ Assert .notNull (securityContextHolderStrategy , "securityContextHolderStrategy cannot be null" );
302
+ this .securityContextHolderStrategy = securityContextHolderStrategy ;
303
+ }
304
+
290
305
private class DigestData {
291
306
292
307
private final String username ;
0 commit comments