1
2つの異なるフィルタでスプリングセキュリティを設定しようとしています。 私が望むのは、あるフィルタで処理されるいくつかのURLと、他のフィルタによって処理されるいくつかのURLを持つことです。 これは私が思い付いたの設定です:スプリングブートセキュリティ - 2つの異なるフィルタ
FILTER1:
@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());
}
}
}
とフィルタは次のようになり
@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
}
}
問題は、両方のことですこれらのフィルタのうちの1つは、要求ごとにチェーン内で呼び出されます。私が行うすべてのリクエストは、最初に1つのフィルタを通過し、次にもう1つのフィルタを通過します。
どうすれば修正できますか?
ありがとうございます。
うーむからリクエストされたURLを取得することができます。ありがとうございました。私はそれを試してみるとあれば、あなたが知ってもらおう – Lazaruss
Ok。このソリューションは私のために働く。もう一度ありがとう。:) – Lazaruss