Как я делаю белый список API в фильтре JWT - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть SpringSecurityWebAppConfig класс, который использует мой собственный класс фильтра JwtAuthenticationFilter.

Теперь вопрос в том, как мне обойти мой JwtAuthenticationFilter для вызовов API, у которых нет заголовка запроса и / или токена. Должен ли я установить его как настраиваемый и прочитать в фильтре?

My JwtAuthenticationFilter - это импортированный класс из другой библиотеки. Цель состоит в том, чтобы повторно использовать файл для других микросервисов.

Пример:

/scanFile не требуется токен запроса. Когда я добавляю в SpringSecurityWebAppConfig. Мой фильтр - throw 401, так как у него нет маркера запроса.

SpringSecurityWebAppConfig class:

public class SpringSecurityWebAppConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public JwtAuthenticationFilter jwtAuthenticationFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/homePage").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
            .antMatchers("/userPage").access("hasRole('ROLE_USER')")
            .antMatchers("/adminPage").access("hasRole('ROLE_ADMIN')")
            .antMatchers(HttpMethod.DELETE, "/data").access("hasRole('ROLE_ADMIN')")
            .antMatchers("/login").permitAll()
            .antMatchers("/logout").authenticated()
            .and()
            .anonymous().disable()
            .exceptionHandling()
            .authenticationEntryPoint(new CustomAuthenticationEntryPoint())
            .and()
            .headers()
            .httpStrictTransportSecurity()
            .includeSubDomains(true).maxAgeInSeconds(31536000);


        // Add a filter to validate the tokens with every request
        http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

JwtAuthenticationFilter Класс:

 private void getJwtFromRequest(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {


            String bearerToken = request.getHeader("Authorization");

            // Step 1: Check if bearer token exist in authorization header and if bearer token start with "Bearer "
            if (!StringUtils.hasText(bearerToken) || !bearerToken.startsWith("Bearer ")) {

                String errorMsg = "No access token found in request headers.";

                Error err = new Error(JWT_AUTHENTICATION_FILTER, "AccessTokenMissingException", errorMsg);

                // Java object to JSON string
                String jsonString = mapper.writeValueAsString(err);

                log.error(jsonString);

                throw new AccessTokenMissingException(errorMsg);
            }

//rest of the processing here ...
}

1 Ответ

0 голосов
/ 06 апреля 2020

так что вы хотите добавить в белый список некоторые API даже без аутентификации Spring Spring?

вы можете использовать web.ignoring (). AntMatchers () в SpringSecurityWebAppConfig, чтобы исключить URL-адреса из безопасности Spring.

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/scanFile/**”);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...