Belirli api çağrıları için captcha filtresi eklemek için invaziv olmayan bir yöntem arıyorum.Ayrıca, yalnızca belirli URL'ler için Spring Security captcha filtresi ekleyin
- İç api ("/ iapi" kullanım Filtre A tüm çağrılarda değil, aynı zamanda bazı kamu isteklerini görmezden:
Benim kurulum bir filtreye her (değil Captcha filtresi) ile iki
WebSecurityConfigurerAdapters
oluşur gibi/authenticate) tüm çağrılarda - Harici aPI ("/ EAPI" kullanım Filtre B)
Ho w Spring Spring cihazından önce halka, dahili api veya harici api aramalarına filtre ekleyebilir miyim? SecurityContext'e ihtiyacım yok, sadece istek başlıklarında bir Captcha’yı kontrol etmeli, filterChain’e (normal filtreler) yönlendirmeli ya da erişimi manüel olarak reddetmeliyim. Web.xml'de bir filtre bildirmeyi denedim, ancak bu bağımlılık enjeksiyonunu kullanma yeteneğini kırıyor.
@EnableWebSecurity
public class SpringSecurityConfig {
@Configuration
@Order(1)
@EnableGlobalMethodSecurity(securedEnabled = true)
public static class InternalApiConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Autowired
private Filter filterA;
public InternalApiConfigurerAdapter() {
super(true);
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/public/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/iapi/**")
.exceptionHandling().and()
.anonymous().and()
.servletApi().and()
.authorizeRequests()
.anyRequest().authenticated().and()
.addFilterBefore(filterA, (Class<? extends Filter>) UsernamePasswordAuthenticationFilter.class);
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return authenticationManager();
}
}
@Configuration
@Order(2)
@EnableGlobalMethodSecurity(securedEnabled = true)
public static class ExternalApiConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Autowired
private FilterB filterB;
public ExternalApiConfigurerAdapter() {
super(true);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/external/**")
.exceptionHandling().and()
.anonymous().and()
.servletApi().and()
.authorizeRequests()
.anyRequest().authenticated().and()
.addFilterBefore(filterB, (Class<? extends Filter>) UsernamePasswordAuthenticationFilter.class);
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return authenticationManager();
}
}
Güncelleme: Ben web.xml''deki ilan filtreli bir çalışma yapılandırmasına sahip anda
İşte benim Bahar Güvenlik Yapılandırma olduğunu. Bununla birlikte, Bahar Bağlamından ayrılmanın dezavantajı vardır (örneğin, çekirdeklerin otomatik olarak bağlanması gibi), bu yüzden Bahar'dan daha iyi bir çözüm bulmaya çalışıyorum.Özeti:
- sadecebelirli URL'ler için bir filtre ekleyin - herhangi bir yapılandırma içine beforeFilter (...) kullanarak bu yapılandırmanın tüm URL'ler için bir filtre ekler: Kalan iki sorunlar vardır. Antmatcher işe yaramadı. Bunun gibi bir şeye ihtiyacım var:/iapi/captcha/,/external/captcha/,/public/captcha/*.
- Spring Security ürününü tamamen atlayan bir genel anım var: (web .ignoring() .antMatchers ("/ public/**");). Spring Security cihazını baypas etmem gerekiyor ama yine de Spring autowiring özelliğini kullanarak bir süzgeç bildirmem gerekiyor, ancak Spring Güvenlik özellikleri zorunlu değil, çünkü captcha filtresim yalnızca çağrıları vatansız bir şekilde reddediyor veya ileri sürüyor.
“A Filtresi” ve “B Filtresi” hakkında konuşuyorsunuz. Captcha filtreniz için yer tutucuları mı yoksa bunun için gerçek bir uygulamanız var mı? Eğer öyleyse, sorunuzu buna göre güncelleyebilir misiniz? –
tam olarak aradığınızı tam olarak bilmiyor, ancak benzer bir soruya [bu yanıtı] (http://stackoverflow.com/a/11929129/4207875) buldu. Farklılıklar, filtrenin zincirin sonuna eklendikleri ve yapılandırmanın XML biçimindedir, ancak javaconfig'te, http.addFilterBefore() de hile yapar. – saljuama
@ksokol Geçerli sistemin filtreleridir, onlara dokunmak istemiyorum. – Journeycorner