JWTAuthorizationFilter применяется для обоих конфигураций безопасности antMatchers - PullRequest
0 голосов
/ 11 декабря 2018

Я использую несколько классов конфигурации безопасности

 @Configuration
    @EnableWebSecurity
    @Slf4j
    public class SecurityConfig {

@Configuration
@Order(2)
public static class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Bean
public UserDetailsService userDetailsService() {
    return new CustomUserDetailsService();
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}


@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());
}


@Autowired
private LoggingAccessDeniedHandler accessDeniedHandler;

// @formatter:off

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/", "/login", "/logout" , "/user/forgot-pwd" , "/user/forgot-pwd/success" ,"/swagger-ui.html").permitAll()
            .antMatchers("/css/**", "/js/**", "/images/**", "/favicon.ico", "/webjars/**", "/vendor/**", "/error/**").permitAll()
            .anyRequest().fullyAuthenticated()
            .and()
                .formLogin()
                    .loginProcessingUrl("/authenticate")
                    .loginPage("/login")
                    .defaultSuccessUrl("/studylist")
                    .failureUrl("/login?error=true")
                    .usernameParameter("username")
                    .passwordParameter("password")
            .and()
                .logout()
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/login?logout=true")
                    .invalidateHttpSession(true)
                    .clearAuthentication(true)
                    .deleteCookies("JSESSIONID")
            .and()
                .exceptionHandling()
                    .accessDeniedHandler(accessDeniedHandler)
            .and()
                .csrf()
            .and()
                .sessionManagement()
                    .invalidSessionUrl("/login")
                    .sessionAuthenticationErrorUrl("/login")
            .and()
                .headers()
                    .frameOptions()
                    .sameOrigin();
}



    // @formatter:on

    }

    @Configuration
@Order(1)
public static class RestSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {


        http.antMatcher("/api/**").addFilter(jWTAuthorizationFilter()).httpBasic();


    }

    @Bean
    public JWTAuthorizationFilter jWTAuthorizationFilter() {

        JWTAuthorizationFilter filter = null;
        try {
            filter = new JWTAuthorizationFilter(authenticationManager());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return filter;
    }


}

Я хочу применить JWTAuthorizationFilter только для URL / api / **, присутствующих в RestSecurityConfig.Но в приведенном выше случае он применяется также для всех antMatchers, присутствующих в WebSecurityConfig.Как избежать этого?

Примечание:
1) Я также пытался использовать FilterRegistrationBean и отключил его на false, но я столкнулся с той же проблемой.Я ссылался на эту ссылку, которая говорит использовать FilterRegistrationBean.

http://blog.florian -hopf.de / 2017/08 / spring-security.html

2) Яиспользуя жестко закодированный токен, поэтому я не добавил ни одного фильтра аутентификации в RestSecurityConfig.

Чего мне не хватает?

Заранее спасибо !!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...