1818
1919import org .springframework .context .ApplicationContext ;
2020import org .springframework .context .ApplicationContextAware ;
21- import org .springframework .security .authentication .password .ChangeExistingPasswordAdvisor ;
2221import org .springframework .security .authentication .password .ChangePasswordAdvice ;
22+ import org .springframework .security .authentication .password .ChangePasswordAdvisor ;
2323import org .springframework .security .authentication .password .ChangePasswordServiceAdvisor ;
24- import org .springframework .security .authentication .password .ChangeUpdatingPasswordAdvisor ;
2524import org .springframework .security .authentication .password .DelegatingChangePasswordAdvisor ;
2625import org .springframework .security .authentication .password .UserDetailsPasswordManager ;
2726import org .springframework .security .config .annotation .web .HttpSecurityBuilder ;
2827import org .springframework .security .core .userdetails .UserDetails ;
29- import org .springframework .security .crypto .factory .PasswordEncoderFactories ;
30- import org .springframework .security .crypto .password .PasswordEncoder ;
3128import org .springframework .security .web .RequestMatcherRedirectFilter ;
3229import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
3330import org .springframework .security .web .authentication .password .ChangeCompromisedPasswordAdvisor ;
3431import org .springframework .security .web .authentication .password .ChangePasswordAdviceHandler ;
3532import org .springframework .security .web .authentication .password .ChangePasswordAdviceRepository ;
3633import org .springframework .security .web .authentication .password .ChangePasswordAdvisingFilter ;
37- import org .springframework .security .web .authentication .password .ChangePasswordProcessingFilter ;
38- import org .springframework .security .web .authentication .password .DefaultChangePasswordPageGeneratingFilter ;
3934import org .springframework .security .web .authentication .password .HttpSessionChangePasswordAdviceRepository ;
4035import org .springframework .security .web .authentication .password .SimpleChangePasswordAdviceHandler ;
4136import org .springframework .security .web .savedrequest .RequestCacheAwareFilter ;
42- import org .springframework .security .web .servlet .util .matcher .PathPatternRequestMatcher ;
4337import org .springframework .util .Assert ;
4438
4539/**
@@ -53,21 +47,17 @@ public final class PasswordManagementConfigurer<B extends HttpSecurityBuilder<B>
5347
5448 private static final String WELL_KNOWN_CHANGE_PASSWORD_PATTERN = "/.well-known/change-password" ;
5549
56- private static final String DEFAULT_CHANGE_PASSWORD_PAGE = DefaultChangePasswordPageGeneratingFilter . DEFAULT_CHANGE_PASSWORD_URL ;
50+ private static final String DEFAULT_CHANGE_PASSWORD_PAGE = "/change-password" ;
5751
5852 private ApplicationContext context ;
5953
6054 private boolean customChangePasswordPage = false ;
6155
6256 private String changePasswordPage = DEFAULT_CHANGE_PASSWORD_PAGE ;
6357
64- private String changePasswordProcessingUrl = ChangePasswordProcessingFilter .DEFAULT_PASSWORD_CHANGE_PROCESSING_URL ;
65-
6658 private ChangePasswordAdviceRepository changePasswordAdviceRepository ;
6759
68- private ChangeExistingPasswordAdvisor changeExistingPasswordAdvisor ;
69-
70- private ChangeUpdatingPasswordAdvisor changeUpdatingPasswordAdvisor ;
60+ private ChangePasswordAdvisor changePasswordAdvisor ;
7161
7262 private ChangePasswordAdviceHandler changePasswordAdviceHandler ;
7363
@@ -86,26 +76,15 @@ public PasswordManagementConfigurer<B> changePasswordPage(String changePasswordP
8676 return this ;
8777 }
8878
89- public PasswordManagementConfigurer <B > changePasswordProcessingUrl (String changePasswordProcessingUrl ) {
90- this .changePasswordProcessingUrl = changePasswordProcessingUrl ;
91- return this ;
92- }
93-
9479 public PasswordManagementConfigurer <B > changePasswordAdviceRepository (
9580 ChangePasswordAdviceRepository changePasswordAdviceRepository ) {
9681 this .changePasswordAdviceRepository = changePasswordAdviceRepository ;
9782 return this ;
9883 }
9984
100- public PasswordManagementConfigurer <B > changeExistingPasswordAdvisor (
101- ChangeExistingPasswordAdvisor changePasswordAdvisor ) {
102- this .changeExistingPasswordAdvisor = changePasswordAdvisor ;
103- return this ;
104- }
105-
106- public PasswordManagementConfigurer <B > changeUpdatingPasswordAdvisor (
107- ChangeUpdatingPasswordAdvisor changePasswordAdvisor ) {
108- this .changeUpdatingPasswordAdvisor = changePasswordAdvisor ;
85+ public PasswordManagementConfigurer <B > changePasswordAdvisor (
86+ ChangePasswordAdvisor changePasswordAdvisor ) {
87+ this .changePasswordAdvisor = changePasswordAdvisor ;
10988 return this ;
11089 }
11190
@@ -136,26 +115,22 @@ public void init(B http) throws Exception {
136115 : this .context .getBeanProvider (ChangePasswordAdviceRepository .class )
137116 .getIfUnique (HttpSessionChangePasswordAdviceRepository ::new );
138117
139- ChangeExistingPasswordAdvisor changeExistingPasswordAdvisor = (this .changeExistingPasswordAdvisor != null )
140- ? this .changeExistingPasswordAdvisor
141- : this .context .getBeanProvider (ChangeExistingPasswordAdvisor .class )
142- .getIfUnique (() -> DelegatingChangePasswordAdvisor .forExisting (
118+ ChangePasswordAdvisor changePasswordAdvisor = (this .changePasswordAdvisor != null )
119+ ? this .changePasswordAdvisor
120+ : this .context .getBeanProvider (ChangePasswordAdvisor .class )
121+ .getIfUnique (() -> DelegatingChangePasswordAdvisor .of (
143122 new ChangePasswordServiceAdvisor (passwordManager ), new ChangeCompromisedPasswordAdvisor ()));
144- ChangeUpdatingPasswordAdvisor changeUpdatingPasswordAdvisor = (this .changeExistingPasswordAdvisor != null )
145- ? this .changeUpdatingPasswordAdvisor : this .context .getBeanProvider (ChangeUpdatingPasswordAdvisor .class )
146- .getIfUnique (ChangeCompromisedPasswordAdvisor ::new );
147123
148124 http .setSharedObject (ChangePasswordAdviceRepository .class , changePasswordAdviceRepository );
149125 http .setSharedObject (UserDetailsPasswordManager .class , passwordManager );
150- http .setSharedObject (ChangeUpdatingPasswordAdvisor .class , changeUpdatingPasswordAdvisor );
151126
152127 FormLoginConfigurer form = http .getConfigurer (FormLoginConfigurer .class );
153128 String passwordParameter = (form != null ) ? form .getPasswordParameter () : "password" ;
154129 http .getConfigurer (SessionManagementConfigurer .class )
155130 .addSessionAuthenticationStrategy ((authentication , request , response ) -> {
156131 UserDetails user = (UserDetails ) authentication .getPrincipal ();
157132 String password = request .getParameter (passwordParameter );
158- ChangePasswordAdvice advice = changeExistingPasswordAdvisor .advise (user , password );
133+ ChangePasswordAdvice advice = changePasswordAdvisor .advise (user , password );
159134 changePasswordAdviceRepository .savePasswordAdvice (request , response , advice );
160135 });
161136 }
@@ -173,28 +148,10 @@ public void configure(B http) throws Exception {
173148 return ;
174149 }
175150
176- PasswordEncoder passwordEncoder = this .context .getBeanProvider (PasswordEncoder .class )
177- .getIfUnique (PasswordEncoderFactories ::createDelegatingPasswordEncoder );
178-
179151 ChangePasswordAdviceHandler changePasswordAdviceHandler = (this .changePasswordAdviceHandler != null )
180152 ? this .changePasswordAdviceHandler : this .context .getBeanProvider (ChangePasswordAdviceHandler .class )
181153 .getIfUnique (() -> new SimpleChangePasswordAdviceHandler (this .changePasswordPage ));
182154
183- if (!this .customChangePasswordPage ) {
184- DefaultChangePasswordPageGeneratingFilter page = new DefaultChangePasswordPageGeneratingFilter ();
185- http .addFilterBefore (page , RequestCacheAwareFilter .class );
186- }
187-
188- ChangePasswordProcessingFilter processing = new ChangePasswordProcessingFilter (
189- http .getSharedObject (UserDetailsPasswordManager .class ));
190- processing
191- .setRequestMatcher (PathPatternRequestMatcher .withDefaults ().matcher (this .changePasswordProcessingUrl ));
192- processing .setChangePasswordAdvisor (http .getSharedObject (ChangeUpdatingPasswordAdvisor .class ));
193- processing .setChangePasswordAdviceRepository (http .getSharedObject (ChangePasswordAdviceRepository .class ));
194- processing .setPasswordEncoder (passwordEncoder );
195- processing .setSecurityContextHolderStrategy (getSecurityContextHolderStrategy ());
196- http .addFilterBefore (processing , RequestCacheAwareFilter .class );
197-
198155 ChangePasswordAdvisingFilter advising = new ChangePasswordAdvisingFilter ();
199156 advising .setChangePasswordAdviceRepository (http .getSharedObject (ChangePasswordAdviceRepository .class ));
200157 advising .setChangePasswordAdviceHandler (changePasswordAdviceHandler );
0 commit comments