关于最近更新某个网站的wss协议逆向的一些想法。

由于某网站(我们这里简称M)的wss协议的一些验证参数升级,导致原来的身份验证失效,从而获取不到最新的消息,于是重新研究了下算法。

具体过程就是不断的用Chrome 浏览器面板来做断点调试,过程就不说了,但是总结了一些想法。

如果在浏览器的JavaScript中找不到加密和解密算法,那么算法一定是在服务器验证的。

如果发现在浏览器可以实现,但是模拟却实现不了,内容参数一样,那么95%以上是头部参数的原因。

如果碰见了问题就一定要记录下来,否则时间久了,就忘记了。下次接着继续踩同样的坑。(画重点)

SpringBoot项目中普通类使用Bean。

我们在SpringBoot中使用Bean的方式是@Autowired 方式自动注入的,但是在某些普通类中使用Bean的话,就不能使用这种方式,比如以下场景:

在使用 import org.java_websocket.client.WebSocketClient; 作为客户端去链接WebSocket服务器的时候,必须使用有参构造,而不能自动注入的情况下,我们要在WebSocketClient中使用自动注入过的redis、mysql等,使用 @Autowired 获取的对象是null,那么只能直接从SpringBoot的Bean对象管理器中拿取所需要的Bean对象。

操作步骤:

一、定义一个获取Bean的工具类。

定义工具类 SpringUtil (名字自定义) 实现 org.springframework.context.ApplicationContextAware 这个接口,代码如下:

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringUtil.applicationContext = applicationContext;
    }

    public static <T> T getBean(Class<T> beanClass) {
        return applicationContext.getBean(beanClass);
    }

    public static <T> T getBean(String beanName, Class<T> beanClass) {
        return applicationContext.getBean(beanName, beanClass);
    }
}

记住,这个类一定要添加 @Component 组件注解

二、使用demo

在一个普通类中使用,比如我们想获取RabbitMq的自动注入对象。

RabbitTemplate rabbitTemplate= SpringUtil.getBean(RabbitTemplate.class);
rabbitTemplate.convertAndSend("test_message","test"+new Date());
原理:就是SpringBoot的Bean都交由ApplicationContext applicationContext 来管理,我们只是间接的从 ApplicationContext applicationContext 这个对象中获取,更多的可以参考Spring的原理。

SpringBoot按每天日期来分割日志配置

SpringBoot的日志是非常重要的一项内容,因为我们可以清晰的记录错误异常以及调试。

第一步,添加依赖:

       <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--这个依赖可以不加,但是有时候会出现问题,建议加上。-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>

第二步,添加配置文件

在目录 /src/main/resources 中添加文件,文件名:logback-spring.xml ,文件名必须是这个,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义日志输出目录 -->
    <property name="LOG_PATH" value="/tmp/logs/jishuge" />

    <!-- 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天日期分割日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 设置日志输出级别 -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

以上是最简单的一个配置,每天 /tmp/logs/jishuge 目录下,产生日志文件,比如2022-06-12.log 这样的按日志分割。