Springboot REST - предоставлять ту же службу, что и защищенная, и незащищенная

Я хочу включить базовую аутентификацию для моих служб Spring https REST (в настоящее время незащищенных) в приложении springboot. Эти службы используют несколько клиентов, в то время как некоторые могут перейти на защищенный, некоторые все еще хотят использовать незащищенную версию еще несколько месяцев. Как я могу предоставить одну и ту же услугу как защищенную, так и незащищенную в одном приложении весенней загрузки?

Хотя я сделал это для служб Apache cxf REST, разместив одну и ту же службу в разных портах и ​​защищая только один порт, не знаю, как это сделать в Springboot.


person Nana_kums    schedule 08.07.2019    source источник


Ответы (1)


Создайте RequestMapping с двумя конечными точками, как показано ниже. Клиенты, которые хотят использовать базовую аутентификацию, будут обслуживаться с использованием /secure/** (невозможно получить доступ без аутентификации), а другие клиенты, которые собираются перейти на безопасную аутентификацию через несколько месяцев, будут обслуживаться с использованием /unsecure/** ( любой может получить доступ). Вы можете использовать RequestMapping на уровне класса, чтобы избежать изменений в каждой конечной точке на уровне метода.

@GetMapping(value= {"/secure/users","/unsecure/users"})
    public ResponseEntity<List<User>> findAllUsers()
    {   
        ...
    }

Теперь настройте безопасность, как показано ниже. для этого вам понадобятся клиентские роли, хранящиеся в БД.

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

         http
         .csrf().disable()
         .authorizeRequests()
         .antMatchers("/unsecure/**").permitAll()
         .antMatchers("/secure/**").hasRole("CLIENT_SECURE") 
         .anyRequest().authenticated();

    }

Рабочий пример Git

Безопасная конечная точка: GET http://localhost:8088/secure/users Статус 403 введите описание изображения здесь

Небезопасная конечная точка: GET: http://localhost:8088/unsecure/users Статус 200 введите описание изображения здесь

person Patel Romil    schedule 08.07.2019