首页 > 其他分享 >Web安全透测试 掌握绝大多数Web漏洞原理及防手段-鸿雁长飞光不度

Web安全透测试 掌握绝大多数Web漏洞原理及防手段-鸿雁长飞光不度

时间:2023-05-27 13:02:36浏览次数:36  
标签:Web 长飞光 name Netty private final 及防 new public

Web安全渗测试 掌握绝大多数Web漏洞原理及防手段

download:3w 51xuebc com

使用Netty和Spring Boot实现仿微信的示例

在本文中,我们将使用Netty和Spring Boot框架来创建一个简单的聊天应用程序,类似于微信。这个应用程序将支持多用户聊天和即时消息发送。下面让我们来一步步看看如何实现。

第一步:设置项目结构和依赖项

首先,我们需要创建一个新的Spring Boot项目,并添加必要的依赖项。我们需要添加以下依赖项:

  • Spring Boot Starter Web
  • Spring Boot Starter Data JPA
  • Netty

第二步:创建数据库模型

接下来,我们将创建一个数据库模型,表示用户和消息之间的关系。我们可以使用Hibernate框架来实现这个模型。

@Entity
@Table(name = "users")
public class User {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    @Column(name = "name", nullable = false, unique = true)
    private String name;
 
    // getters and setters
 
}
@Entity
@Table(name = "messages")
public class Message {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "from_user_id", nullable = false)
    private User fromUser;
 
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "to_user_id", nullable = false)
    private User toUser;
 
    @Column(name = "content", nullable = false)
    private String content;
 
    // getters and setters
 
}

第三步:创建Netty服务器

接下来,我们将使用Netty框架来创建一个聊天服务器。我们需要定义一个ChannelInitializer类,用于初始化Netty的管道。

@Component
public class ChatServerInitializer extends ChannelInitializer<SocketChannel> {
 
    private final ChatServerHandler chatServerHandler;
 
    @Autowired
    public ChatServerInitializer(ChatServerHandler chatServerHandler) {
        this.chatServerHandler = chatServerHandler;
    }
 
    @Override
    public void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
 
        pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
        pipeline.addLast(new StringDecoder());
        pipeline.addLast(new StringEncoder());
 
        pipeline.addLast(chatServerHandler);
    }
}

然后,我们需要创建一个Netty服务器,并将它绑定到一个端口上。

@Component
public class ChatServer {
 
    private final EventLoopGroup bossGroup;
    private final EventLoopGroup workerGroup;
    private final ServerBootstrap serverBootstrap;
 
    @Autowired
    public ChatServer(ChatServerInitializer chatServerInitializer) {
        bossGroup = new NioEventLoopGroup();
        workerGroup = new NioEventLoopGroup();
        serverBootstrap = new ServerBootstrap();
 
        serverBootstrap.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(chatServerInitializer);
    }
 
    public void start(int port) throws InterruptedException {
        serverBootstrap.bind(port).sync().channel().closeFuture().sync();
    }
 
    public void stop() {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
}

第四步:处理Netty消息

我们需要实现一个Handler类,用于处理Netty管道中的消息。在这个示例中,我们需要解析客户端发送的JSON消息,并将其保存到数据库中。

@Component
@ChannelHandler.Sharable
public class ChatServerHandler extends SimpleChannelInboundHandler<String> {
 
    private final ObjectMapper objectMapper;
    private final UserService userService;
    private final MessageService messageService;
 
    @Autowired
    public ChatServerHandler(ObjectMapper objectMapper, UserService userService, MessageService messageService) {
        this.objectMapper = objectMapper;
        this.userService = userService;
        this.messageService = messageService;
    }
 
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        JsonNode jsonNode = objectMapper.readTree(msg);
 
        if (!jsonNode.has("from") || !jsonNode.has("to") || !jsonNode.has("content")) {
            return;
        }
 
        User fromUser = userService.findByName(jsonNode.get("from").asText());
        User toUser =

标签:Web,长飞光,name,Netty,private,final,及防,new,public
From: https://blog.51cto.com/u_16123966/6361939

相关文章

  • ASP.NET MVC WebAPI Put和Delete请求出现405(Method not allowed)错误
    解决办法:在站点根目录下的web.config设置如下(主要参考添加项):<system.webServer></system.webServer>(End)转自:https://www.bbsmax.com/A/qVdepEM85P/......
  • Web 前端常用正则校验规则
    Web前端常用正则校验规则作为Web前端开发,常用的正则校验规则有很多。下面是一些常见的示例:校验手机号码手机号码的正则表达式可以根据不同国家和地区的手机号码格式进行调整。以下是中国大陆的手机号码正则表达式:constregex=/^1[3456789]\d{9}$/;在这个示例中,正则表......
  • How to Control an External USB Web Camera Using a Raspberry Pi All In One
    HowtoControlanExternalUSBWebCameraUsingaRaspberryPiAllInOne如何使用树莓派控制外接USB网络摄像头USB网络摄像头罗技C270i高清网络摄像头(视频120万像素,照片300万像素)1280x720=>720P1280*720//921600不足100万,90万✅PCh......
  • 混合模式开发之原生App webview与H5交互
    快速实现 混合模式开发之原生Appwebview与H5交互,详情请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12550 效果图如下:  代码如下: #原生appwebview与H5交互实现####HTML代码部分```html<template><viewclass="content"><viewclass="text......
  • Python Web开发:深入剖析Web框架及其实现方式
    1.引言在现代Web应用程序开发中,Python是最受欢迎的编程语言之一。它是一种高级、通用、解释性的语言,被广泛应用于开发Web应用程序、科学计算、数据分析、视觉化和人工智能等领域。Python语言旨在提高开发者的生产力,并让他们以更少的代码实现更多的功能。在本文中,我们将讨论Python......
  • 【web 开发】PHP中的类和对象的理解
    前言面向对象编程的主要优势就是把编程的重心从处理过程转移到了对现实世界实体的表达。这十分符合人们的思维方式和逻辑类(classes)和对象(objects)并不难理解。试想一下,在日常生活中,自然人对事物的认识,一般是由看到的、感受到的实体(比如日常生活中的衣食住行)归纳出来的,或者抽象出它们......
  • webpack报错处理:The extension in the request is mandatory for it to be fully spe
    完整的报错提示如下:BREAKINGCHANGE:Therequest'./module2'failedtoresolveonlybecauseitwasresolvedasfullyspecified(probablybecausetheoriginisstrictEcmaScriptModule,e.g.amodulewithjavascriptmimetype,a'*.mjs'file,or......
  • webpack4
    webpack4webpack是一种前端资源构建工具,一个静态模块打包器(modulebundler)。在webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。使用初始化package.jsonnpminit下......
  • WebGL几种常用服务图层的制作流程
    当前,越来越多的用户开始使用三维GIS平台SuperMapiClent3DforWebGL,对于新用户来说最常见的两个问题就是:1.为什么打开场景看不到数据?2.为何范例能实现的效果,我的数据就不行了?而造成这两个问题绝大多数的原因是数据处理不当,本文将讲解制作WebGL常用服务图层的流程及注意事项。 ......
  • WebShell 特征分析
    WebShell特征分析作者:HaiCheng@助安社区,关注公众号领取学习路线和资料。WebShell是黑客经常使用的一种恶意脚本,其目的是获得服务器的执行操作权限,常见的webshell编写语言为asp/jsp/php。主要用于网站管理,服务器管理,权限管理等操作。使用方法简单,只需要上传一个代码文件,通过网址访......