Ich versuche, Federsicherheit mit zwei verschiedenen Filtern zu konfigurieren. Ich möchte einige URLs haben, die von einem Filter verarbeitet werden, und einige URLs, die von einem anderen Filter verarbeitet werden. Dies ist die Setup kam ich mit:Spring Boot Sicherheit - zwei verschiedene Filter
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled=true)
public class SecurityConfigurationContext {
@Order(1)
@Configuration
public static class ConfigurerAdapter1 extends WebSecurityConfigurerAdapter{
...
@Override
protected void configure(final HttpSecurity http) throws Exception {
// Handlers and entry points
http.exceptionHandling()
.authenticationEntryPoint(MyCustomAuthenticationEntryPoint);
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/filter1-urls/*").hasRole("USER");
http.addFilterBefore(myCustomFilter1, ChannelProcessingFilter.class);
http.csrf().disable();
http.httpBasic()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myCustomAuthenticationService)
.passwordEncoder(new BCryptPasswordEncoder());
}
}
@Order(2)
@Configuration
public static class ConfigurerAdapter2 extends WebSecurityConfigurerAdapter{
...
@Override
protected void configure(final HttpSecurity http) throws Exception {
// Handlers and entry points
http.exceptionHandling()
.authenticationEntryPoint(MyCustomAuthenticationEntryPoint);
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/filter2-urls/*").hasRole("SUPER_USER");
http.addFilterBefore(myCustomFilter2, ChannelProcessingFilter.class);
http.csrf().disable();
http.httpBasic()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myCustomAuthenticationService)
.passwordEncoder(new BCryptPasswordEncoder());
}
}
}
und Filter wie folgt aussehen:
Filter1:
@Component
@Order(1)
public final class MyCustomFilter1 implements Filter{
public MyCustomFilter1() {
super();
}
@Override
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException {
// logic for processing filter1-urls
}
}
Filter2:
@Component
@Order(2)
public final class MyCustomFilter2 implements Filter{
public MyCustomFilter2() {
super();
}
@Override
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException {
// logic for processing filter2-urls
}
}
Das Problem, das beide ist Diese Filter werden für jede Anforderung in einer Kette aufgerufen. Jede Anfrage, die ich mache, durchläuft zuerst einen Filter und dann den anderen, und zwar nur durch einen.
Wie behebe ich das?
Vielen Dank im Voraus.
Hmmmm. Dank bekommen. Ich werde es versuchen und lassen Sie wissen, wenn Ich habe es geschafft. – Lazaruss
Ok. Diese Lösung funktioniert für mich. Nochmals vielen Dank :) – Lazaruss