/images/avatar-home.jpeg

关于续订程序出现授权出错问题

由于微软将续订程序的回调地址拉黑(会认为使用此回调地址的应用为钓鱼应用),从而将创建的 应用程序 禁用,导致应用无法进行授权。

之前已经授权过的应用暂时不影响(在应用 access_token有效期内),今天会临时加急更新一版,明天下午上线,临时解决这个问题。

同时新版本预计年后上线。

 

查看应用是否被禁用

https://i.328888.xyz/2023/01/14/w62ak.png

https://i.328888.xyz/2023/01/14/w6OkL.png

为知笔记 Docker版本 私有部署

目前已经使用docker私有部署的为知快2年了,之前用过 onenote、印象笔记、有道笔记、notion、蚂蚁笔记等等,全部用过一段时间后还是选择了为知笔记,一是服务的在自己手里,数据配合脚本实时同步到OneDrive,二是目前重构版的客户端确实好用很多,不像之前要卡半天~

看网上一直在吹这个notion,不得不说操作上确实很爽,但每次打开不嫌慢吗?

 

下面是为知的docker搭建方式,其实官方写得很清楚了~

docker run --name wiz \  
--restart=always \  
-it -d \  
-v  ~/wizdata:/wiz/storage\   
-v  /etc/localtime:/etc/localtime \  
-p 8080:80 \  
-p 9269:9269/udp \   
wiznote/wizserver 

nginx 反代

location / {  
proxy_set_header Host $host;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_set_header x-wiz-real-ip $remote_addr;  
proxy_set_header X-Forwarded-Proto $scheme;  
proxy_pass http://ip:8081;  
}

https://img.qyi.io/images/2021/12/04/image883fc7b6466fafdb.png

2021黑五 杜甫收获

SYS独服 24.99欧元

标准配置

SYS-2-SAT-32 Server - Intel Xeon D1540 - 32GB DDR3 ECC 2133MHz - 4x 2To HDD Soft RAID  250Mbps

开机结果

cpu升级为 Intel Xeon D1541

硬盘升级为 4x4T

开了3台结果如下:

12-01 21:23 GRA2  d1541 4x4T  250m  硬盘均 120小时  
12-02 13:02 GRA1  d1541 4x4T  G口  3个硬盘6k小时,1个110小时  
12-02 13:30 GRA1  d1541 4x4T  250m 3个新盘,1个1k小时

准高配:D-1540+16T硬盘+250Mbps网络
高配:D-1541CPU+16T硬盘+250Mbps网络
顶配:D-1541CPU+16T硬盘+1Gbps网络https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif

gson java.lang.NumberFormatException: empty String

问题:

反序列化时实体类型为 int/Integer/Long 等等,而json字段为string,如下

#json  
{"a":""}  
#伪代码  
class test {  
  private Integer a;  
}

解决方法:

为gson注册一个适配器

import com.google.gson.JsonSyntaxException;  
import com.google.gson.TypeAdapter;  
import com.google.gson.stream.JsonReader;  
import com.google.gson.stream.JsonToken;  
import com.google.gson.stream.JsonWriter;

import java.io.IOException;

public class IntTypeAdapter extends TypeAdapter<Integer> {  
    @Override  
    public void write(JsonWriter out, Integer value)  
            throws IOException {  
        out.value(value);  
    }

    @Override  
    public Integer read(JsonReader in) throws IOException {  
        JsonToken peek = in.peek();  
        if (peek == JsonToken.NULL) {  
            in.nextNull();  
            return null;  
        }

        try {  
            String result = in.nextString();  
            if ("".equals(result)) {  
                return null;  
            }  
            return Integer.parseInt(result);  
        } catch (NumberFormatException e) {  
            throw new JsonSyntaxException(e);  
        }  
    }

}
private Gson gson = new GsonBuilder()  
            .registerTypeHierarchyAdapter(Integer.class, new IntTypeAdapter())  
            //.registerTypeHierarchyAdapter(Long.class, new LongTypeAdapter())  
            .create();

需要注意的是, registerTypeHierarchyAdapter 里的类型一定要准确,一开始百度出来的是用 Number,会无法进入适配器,比如 https://www.jianshu.com/p/081ab69cf9a8 ,注册的是 int和integer,但TypeAdapter 是number。

javax.mail.FolderClosedException 异常

在测试 javax.mail 中的 imap 协议 idle 时会有olderClosedException异常。

背景

在Messaging对象上调用方法并且拥有该对象的Folder由于某种原因而死亡时,将引发此异常。

由于我没注意看文档,IMAPFolder.idle();是阻塞的而又没有循环读,导致直接关闭了资源~

收件箱中共633封邮件!  
收件箱中共78封未读邮件!  
收件箱中共0封新邮件!  
收件箱中共0封已删除邮件!  
------------------------开始解析邮件----------------------------------  
支持idle  
Got 1 new messages  
---------------------------------------------------  
-----关闭资源-----  
标题: Re:测试邮件推送  
javax.mail.FolderClosedException  
	at com.sun.mail.imap.IMAPMessage.getProtocol(IMAPMessage.java:169)  
	at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1546)  
	at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:808)  
	at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1508)  
	at io.qyi.qqBotManage.mail.mail$1.messagesAdded(mail.java:88)  
	at javax.mail.event.MessageCountEvent.dispatch(MessageCountEvent.java:154)  
	at javax.mail.EventQueue.run(EventQueue.java:170)  
	at java.lang.Thread.run(Thread.java:745)
import com.sun.mail.imap.IMAPFolder;

import javax.mail.*;  
import javax.mail.event.MessageCountAdapter;  
import javax.mail.event.MessageCountEvent;  
import java.io.IOException;  
import java.util.Properties;

/**  
 * @author LuoYe  
 * @version 1.0  
 * @description: TODO  
 * @date 2021/5/12 3:13  
 */

public class mail {  
    public static void main(String[] args) throws MessagingException, IOException {  
        init();  
    }

    public static void init() throws MessagingException, IOException {  
        Properties props = new Properties();  
        props.setProperty("mail.store.protocol", "imap");  
        props.setProperty("mail.imap.host", "outlook.office365.com");  
        props.setProperty("mail.imap.port", "993");  
        /*tls与https需要增加以下代码*/  
        props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
        props.setProperty("mail.imap.socketFactory.fallback", "false");  
        props.setProperty("mail.imap.socketFactory.port", "993");

        Session session = Session.getInstance(props);  
        // 创建IMAP协议的Store对象  
        Store store = session.getStore("imap");

        // 连接邮件服务器  
        store.connect("账户", "密码");

        // 获得收件箱  
        Folder folder = store.getFolder("INBOX");  
        // 以读写模式打开收件箱  
        folder.open(Folder.READ_WRITE);

        // 获得收件箱的邮件列表  
        Message[] messages = folder.getMessages();

        // 打印不同状态的邮件数量  
        System.out.println("收件箱中共" + messages.length + "封邮件!");  
        System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");  
        System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");  
        System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");

        System.out.println("------------------------开始解析邮件----------------------------------");

        // 解析邮件  
        /*for (Message message : messages) {  
            IMAPMessage msg = (IMAPMessage) message;  
            String subject = MimeUtility.decodeText(msg.getSubject());  
            System.out.println("[" + subject + "]未读,是否需要阅读此邮件(y/n)?");  
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
            String answer = reader.readLine();  
            if ("y".equalsIgnoreCase(answer)) {  
                System.out.println(msg.getContent().toString());  
                // POP3ReceiveMailTest.parseMessage(msg);	// 解析邮件  
                // 第二个参数如果设置为true,则将修改反馈给服务器。false则不反馈给服务器  
                // msg.setFlag(Flag.SEEN, true);	//设置已读标志

            }  
        }*/

        folder.addMessageCountListener(new MessageCountAdapter() {  
            @Override  
            public void messagesAdded(MessageCountEvent e) {  
                // super.messagesAdded(e);  
                Message[] msgs = e.getMessages();  
                System.out.println("Got " + msgs.length + " new messages");  
                for (Message msg : msgs) {  
                    System.out.println("---------------------------------------------------");  
                    try {  
                        System.out.println("标题: " + msg.getSubject());  
                        System.out.println("内容: " + msg.getContent().toString());  
                    } catch (MessagingException messagingException) {  
                        messagingException.printStackTrace();  
                    } catch (IOException ioException) {  
                        ioException.printStackTrace();  
                    }  
                }  
            }

            @Override  
            public void messagesRemoved(MessageCountEvent e) {  
                super.messagesRemoved(e);  
            }  
        });

        if (folder instanceof IMAPFolder) {  
            System.out.println("支持idle");  
            IMAPFolder f = (IMAPFolder) folder;  
            f.idle();  
        }

        System.out.println("-----关闭资源-----");  
        // 关闭资源  
        folder.close(false);  
        store.close();

    }  
}

pfSense HTTP_REFERER 登录校验问题

An HTTP_REFERER was detected other than what is defined in System -> Advanced (http://x.x.x.x/services_dhcp.php). If not needed, this check can be disabled in System -> Advanced -> Admin

问题:

由于服务器有多个ip,所以我就想装一个软路由来统一控制,刚装上pfSense 就无法在web登录,google搜索了半天才搜到,还是错的……

解决办法:

1、vnc进入 PHP shell + pfSense tools

2、执行 playback disableref erercheck

 

注意:

一开始我搜索到的解决办法是由pfSsh.php执行,也就是

pfSsh.php playback disablereferercheck

但是在新版(2.5.0)执行无任何效果,低于这个版本的可以尝试这条命令。