Arhn - архитектура программирования

получить IP-адрес клиента в Spring Boot Security

Это мой первый вопрос здесь, извините, если что-то не так, пожалуйста, поправьте меня).
Я работаю над приложением весенней загрузки с защитой весенней загрузки. Я использую RestController для создания своего API.
Мне нужно регистрировать IP-адреса всех клиентов, которые пытаются получить доступ к моему API, даже если они не прошли аутентификацию.
Я могу получить IP-адрес клиента после аутентификации или когда клиент обращается к общедоступному API следующим образом (получить от HttpServletRequest):

    @GetMapping("/api/public/getDeviceList")
    public List<Device> getDeviceList(HttpServletRequest httpServletRequest) {
        System.out.println(httpServletRequest.getRemoteHost());
    }

Но когда клиент получает доступ к частному API с неправильными учетными данными, я не получаю эти IP-адреса.
Как я могу получить эту информацию?


Ответы:


1

Метод getRemoteHost() возвращает имя клиентской системы в виде строки.

Метод getRemoteAddr() возвращает IP-адрес клиента, который обращается к вашему веб-приложению Java.

Попробуйте с этим на вашем контроллере метода

System.out.println(httpServletRequest.getRemoteAddr());

Если ваш сервер локальный, он вернет вам 0:0:0:0:0:0:0:1, но если вы проверите на другом компьютере в вашей локальной сети, должен быть показан правильный ip, например 192.168.1.4

04.03.2020
  • Да, извините, я пишу неправильный метод. httpServletRequest.getRemoteAddr() это правильно. Я имею в виду в своем вопросе, что я не могу видеть IP-адрес клиента, пока они не аутентифицированы. Если они попытаются получить доступ, например, @GetMapping("/api/private/getDeviceListPrivate") и установить неправильный логин/пароль, я не могу зарегистрировать IP-адрес клиента в этом случае. Если они 05.03.2020
  • Например, если кто-то попытается найти правильный пароль для пользователя и проверит другой пароль. Я не могу получить эти ситуации. 05.03.2020
  • Вам нужно использовать метод для получения IP в момент ввода пользователем пароля, в методе, где логин 05.03.2020
  • Хосе, спасибо за помощь. Я нахожу решение, которое мне нужно, в добавлении пользовательского фильтра. Я напишу это ниже. С наилучшими пожеланиями 05.03.2020
  • Привет, @Bardales. Я тестировал на другом компьютере в своей локальной сети, и request.getRemoteAddr() все еще возвращается: 0:0:0:0:0:0:0:1. 28.07.2021

  • 2

    Я получаю решение по добавлению пользовательского фильтра в цепочку безопасности. В этом фильтре я могу регистрировать всю необходимую мне информацию. Создать фильтр:

    public class CustomSecurityFilter extends GenericFilterBean {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            System.out.println("Enter custom filter");
            System.out.println("method:"+request.getMethod() + "\nurl:"+request.getRequestURI()+"\nip address:"+request.getRemoteAddr());
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }
    

    затем добавьте этот фильтр в WebSecurityConfigurerAdapter в методе configure (HttpSecurity http)

    @Configuration
    @EnableWebSecurity
    public class RestSecurityConfig extends WebSecurityConfigurerAdapter {
    
    
    
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.cors();
            http.csrf().disable().authorizeRequests()
                    .antMatchers("/api/private/**").authenticated()
                    .and().httpBasic()
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    // -----Add new filter in chain-----
          http.addFilterBefore(new CustomSecurityFilter(), 
          SecurityContextPersistenceFilter.class);
    
        }
    
        @Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/api/public/**");
        }
    }
    
    05.03.2020
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..