当前位置: 首页 > 知识库问答 >
问题:

从更新哈希集。在应用程序运行时发送txt

谢雅珺
2023-03-14

目标是从IP地址列表中阻止对页面的访问。此列表位于文件列表中。txt。我提供了一个服务,可以检查来自请求的IP,并使用“不需要的”地址的哈希集,但子目标是这个列表中的“即时捕获”。txt。我的意思是:如果我向这个文件添加了一些IP,它应该在不重新启动应用程序的情况下被阻止。我不知道如何解决这个问题,因为我的应用程序只有在重启后才会刷新这个列表。我的代码在下面

    @Service
public class BlackListService {

    public Set<String> loadBlackList() {
        java.util.Set<java.lang.String> blackList = new HashSet<>();
        InputStream resource = null;
        try {
            resource = new ClassPathResource(
                    "blacklist.txt").getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource))) {
            blackList = reader.lines().collect(Collectors.toSet());
            for (java.lang.String address:
                    blackList) {
                System.out.println(address);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return blackList;
    }

    public boolean isNowAllowedIP(Set<String> blackList, String requestIP) {
        return blackList.contains(requestIP);
    }

}

和控制器:

@Controller
public class MainController {

    private final BlackListService blackListService;

    public MainController(BlackListService blackListService) {
        this.blackListService = blackListService;
    }

    @GetMapping("/")
    public String mainPage(HttpServletRequest request, Model model) {
        Set<String> blackList = blackListService.loadBlackList();

        if (blackListService.isNowAllowedIP(blackList, request.getRemoteAddr())) {
            Logger logger = Logger.getLogger("Access logs");
            logger.warning("Access disallowed");
            model.addAttribute("message", request.getRemoteAddr() + ": Access disallowed");
            return "index";
        }
        model.addAttribute("message", "Access allowed");
        return "index";
    }

}

有人能帮忙完成这个“子目标”吗?

共有1个答案

尉迟越
2023-03-14

你需要的是一个经常性的背景工作,在你更改黑名单后,它会重新加载你的黑名单。本博客将讨论用Spring实现这一点的“现代”方法。

  • 当您的程序启动并首次加载时,保存文件的最后修改时间。请参阅此项以检查文件修改时间。
  • 安排后台作业每分钟运行一次(或5分钟或任何足以满足您需求的频率)。
  • 当作业运行时,检查文件上当前的最后更新时间,如果它与保存的时间不同,则是重新加载列表的时候了。
 类似资料:
  • 问题内容: 我已经有这个问题近两个月了,无法解决。问题是,如果我的应用程序正在运行,并且我从Eclipse运行(重新安装)我的应用程序,则会收到一条错误消息,指示我的应用程序已崩溃“不幸的是,已停止。”。我注意到,当我从PC / Eclipse上运行它时,也会发生这种情况,我认为只有在一段时间不运行它时,它才会发生。 仅当应用程序在第三个活动(BaseDiagramActivity)中处于活动状态

  • 当应用程序在后台时,如何更新包含数据负载的Firebase推送通知?有没有办法在通知中指定通知id给Firebase API? 完整的项目在github https://github.com/akshatashan/FireBaseCloudMessagingDemo中

  • 问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您

  • 我记得读过一个方案,其中检查密码的过程是这样的: 给定数据库中的(哈希、盐)值, 用salt哈希密码以检查哈希, 使用旧哈希作为salt的哈希密码, 在数据库中存储(新哈希,也称为旧哈希) 我找不到原始来源无论如何,我不明白 > < li> 使用旧哈希作为salt的优势是什么(与使用随机salt相反), 这种方案的优点是什么(进一步使彩虹表攻击复杂化?),以及 如果有优势,如何使用PHPass应用

  • 我正在寻找一种通过改变散列来改变部分样式的方法。让我以一个例子来解释: > 当前URL为: 然后单击复选框,URL将更改为: 我想更改类的。 我尝试了以下代码,但它不起作用: 实际上,每次哈希更改时,控制台中都不会出现任何内容。

  • 不是一个真正重要的问题,但只是好奇。您可以在运行时更改应用程序图标吗?例如,有一个按钮,当您按下该按钮时,您会在flutter中获得不同的应用程序图标(假设应用程序图标已经“设置”)。Android和iOS。 非常感谢任何意见。谢谢