[英]get client ip address in spring boot security
这是我在这里的第一个问题,如果有什么不对的地方,我很抱歉,请纠正我)。
我正在开发具有 Spring Boot 安全性的 Spring Boot 应用程序。 我使用RestController
来创建我的 API。
我需要记录所有尝试访问我的 API 的客户端的 IP 地址,即使他们没有经过身份验证。
我可以在身份验证后或客户端通过此访问公共 API 时获取客户端的 IP(从HttpServletRequest
获取):
@GetMapping("/api/public/getDeviceList")
public List<Device> getDeviceList(HttpServletRequest httpServletRequest) {
System.out.println(httpServletRequest.getRemoteHost());
}
但是当客户端使用错误的凭据访问私有 API 时,我没有得到这些 IP 地址。
如何检索这些信息?
getRemoteHost()
方法以字符串形式返回客户端系统的名称。
getRemoteAddr()
方法返回访问 Java Web 应用程序的客户端 IP 地址
在你的方法控制器上试试这个
System.out.println(httpServletRequest.getRemoteAddr());
如果您的服务器是本地服务器,它将返回0:0:0:0:0:0:0:1
但如果您在本地网络上的另一台计算机上进行测试,则应显示正确的 IP,例如192.168.1.4
我得到了在安全链中添加自定义过滤器的解决方案。 在这个过滤器中,我可以记录我需要的所有信息。 创建过滤器:
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);
}
}
然后在 configure(HttpSecurity http) 方法的 WebSecurityConfigurerAdapter 中添加此过滤器
@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/**");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.