получить IP-адрес клиента в безопасности весенней загрузки - PullRequest
2 голосов
/ 05 марта 2020

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

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

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

Ответы [ 2 ]

1 голос
/ 05 марта 2020

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

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

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

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

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

0 голосов
/ 05 марта 2020

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

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/**");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...