当前位置: 首页 > 面试题库 >

Spring Security-将IP范围列入白名单

顾淳
2023-03-14
问题内容

我已经看过很多资源和stackoverflow问题,它们为使用.xml文件提供了答案:

  • http://websystique.com/spring-security/spring-security-4-method-security-using-preauthorize-postauthorize-secured-el/

  • http://docs.spring.io/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#nsa-gms

我只想知道是否可以使用Spring Security在不使用XML配置的情况下将IP地址范围列入白名单?

以下是控制器中的一种简单方法:

@RequestMapping(value = "/makeit", method = RequestMethod.GET)
@ResponseBody
//@PreAuthorize("hasIpAddress('192.168.0.0/16')")
public String requestData() {

    return "youve made it";
}

我已经为security配置创建了一个单独的类,但是它没有太多的东西,我只是为EnableGlobalMethodSecurity注释创建了它-
这样我就可以使用@PreAuthorize注释

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");

        /*http
            .authorizeRequests()
                .anyRequest().hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").access("hasIpAddress('0.0.0.0/0')");*/

        /*http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");*/

    }
}

但是,当我尝试时,它的响应是(通过POSTMAN):

{
  "timestamp": 1486743507520,
  "status": 401,
  "error": "Unauthorized",
  "message": "Full authentication is required to access this resource",
  "path": "/makeit"
}

其他事实:

我的IP地址在此范围内。我正在使用Spring版本1.3.1(我相信Spring Security是4.0.3)。


问题答案:

因此,借助@Dur,我们能够解决此问题。问题与Spring Boot无关(上面的所有方法都可以正常工作),但问题在于,当用户本地访问Spring
App(本地主机:8080)时,本地主机使用IPv6地址,并且上述代码允许访问IPv4地址。

您需要通过将IPv4地址更改为IPv6(或Tomcat默认设置为)来更改SpringSecurityConfig文件,或者可以更改访问应用程序的方式(转到127.0.0.1:8080)。

注意-这仅用于本地测试。您需要测试并获取将访问您的应用程序的用户/服务的IP地址。

简而言之,您可以使用上述代码在不使用AuthenticationManagerBuilder的情况下将IP范围列入白名单。



 类似资料:
  • 问题内容: 我有很多不同提供商的IP范围。例如 我将此IP转换为int32: 我的任务: 通过用户IP地址查找提供者名称(例如192.168.2.20(3232236052)) 在MySQL中很简单: Redis怎么做? 问题答案: 这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单: 使用哈希的集合来存储提供者数据 使用zset索引范围的最大值 检索最大值大于IP的(唯一)范围

  • 我正在Heroku上部署后端服务器(节点/express)。它使用Mongodb Atlas作为数据库,应用程序托管在Heroku上。 在开发过程中,我接受了“允许从任何地方访问”,这很好,但对于生产,我认为这是一个安全风险。我似乎找不到我的Heroku服务器的IP地址,因为它似乎不时发生变化。 是否有一些易于实施但又安全的最佳做法?

  • 问题内容: 我有一个表,其中包含一列作为CIDR值,例如,我还有其他2列(start_ip_range和end_ip_range),我想填充这2列FROM CIDR列 Java代码可能如下所示: 如何将其转换为MySql查询。 问题答案: 你可以这样转换 询问 样品表 或者,您可以在虚拟列中使用它。因此,您可以直接获得正确的值。 虚拟领域

  • 我的目标是创建一个函数,从给定的IP范围中选择一个IP地址。 目前我正在使用此功能: 我知道此函数只生成IP范围,但是在生成该范围后如何选择IP? 示例:我拥有给定的IP范围93.118.193.0-93.118.193.255。在此范围内,自动获取一个(例如:93.118.193.83)并将其设置为“远程地址”属性。如果已经设置了IP,则随机获取另一个IP(以便两个“远程地址”相同)。 我尝试使

  • 您可以将帐户的隧道端点的访问权限列入白名单。 白名单由ngrok.com服务器强制执行。 它全局应用于所有的隧道端点。 检查到任何隧道端点的任何入站连接,以确保连接的源IP地址与白名单中的至少一个条目匹配。 如果连接与白名单不匹配,它会立即终止,而不会转发到ngrok客户端。 作为特殊情况,如果您的白名单为空,则允许所有连接。. 管理白名单 您可以在ngrok控制面板的auth选项卡上管理IP白名

  • G01的“IP黑白名单”是针对IP是否被允许访问网站的功能。加入黑名单的IP则拒绝其对网站的访问,而加入白名单的IP则不受任何限制。注意:当黑白名单出现交叉时,白名单优先。 由于G01的黑白名单是驱动级,因此当驱动未安装成功时,则不生效(主要为Linux系统环境)。所以当出现将IP加入黑名单后还记录该IP攻击日志时,请对照Linux支持内核版本查看是否支持该系统内核版本。 打开“IP黑白名单”功能