目标是阻止IP地址列表中对页面的访问。此列表位于文件list.txt中。我创建了一个服务,用于检查来自请求的IP,并使用HashSet检查“不想要的”地址,但是子目标是“动态捕获”这个list.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";
}
}有人能帮忙完成这个“子目标”吗?
发布于 2022-05-19 15:35:33
在loadBlackList()中,您正在从类路径读取资源。这可能是获取一个内置到jar文件中的文件,还是构建不是您正在编辑的文件的dir?我将尝试更改loadBlackList()以使用FileReader和文件系统上的路径,而不是类路径中的路径,而不是InputStreamReader。
https://stackoverflow.com/questions/72231412
复制相似问题