插件开发-插件代理
# 插件代理
从PerfreeBlog2.2.0版本开始,插件支持了一系列代理方法供插件使用,提高插件的灵活性,在开发过程中,只需继承指定的代理类,并增加@Component
注解,就可以在特定的时机执行插件的自定义代码,比如修改渲染后的html,评论过滤等
# Html渲染代理
Html渲染代理类HtmlRenderProxy: 插件可继承该类重写其中的方法,获取渲染的html Document对象进行操作, 内置代理方法如下:
package com.perfree.plugin.proxy;
import org.jsoup.nodes.Document;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Html渲染代理: 插件可继承该类,获取渲染的html Document对象进行操作
*/
public abstract class HtmlRenderProxy {
/**
* 修改渲染后的html Document
*
* @param document html document对象
* @param response HttpServletResponse
* @param request HttpServletRequest
* @return 修改后的 html Document
*/
public Document editDocument(Document document, HttpServletResponse response, HttpServletRequest request) {
return document;
}
/**
* 修改渲染后的html Document(该方法只有访问地址非/admin起始时才会调用)
*
* @param document html document对象
* @param response HttpServletResponse
* @param request HttpServletRequest
* @return 修改后的 html Document
*/
public Document editFrontDocument(Document document, HttpServletResponse response, HttpServletRequest request) {
return document;
}
/**
* 修改渲染后的html Document(该方法只有访问地址为/admin起始时才会调用)
*
* @param document html document对象
* @param response HttpServletResponse
* @param request HttpServletRequest
* @return 修改后的 html Document
*/
public Document editAdminDocument(Document document, HttpServletResponse response, HttpServletRequest request) {
return document;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
示例(在渲染后的前台html的head中追加自定义js代码):
package com.copy;
import com.perfree.plugin.proxy.HtmlRenderProxy;
import org.jsoup.nodes.Document;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CopyHandle extends HtmlRenderProxy {
@Override
public Document editFrontDocument(Document document, HttpServletResponse response, HttpServletRequest request) {
document.head().append("<script>console.log('插件追加的js代码')</script>");
return document;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 评论代理
评论代理类CommentProxy: 插件可继承该类重写其中的方法,对评论事件进行操作,内置方法如下:
package com.perfree.plugin.proxy;
import com.perfree.commons.ResponseBean;
import com.perfree.model.Comment;
/**
* 评论代理: 插件可继承该类,对评论事件进行操作
*/
public abstract class CommentProxy {
/**
* 评论保存之后操作
* @param comment 评论内容信息对象
* @return Comment
*/
public Comment commentSaveAfter(Comment comment) {
return comment;
}
/**
* 是否允许存库,如允许存库则返回null,反之返回对应的响应信息
* @param comment 评论内容信息对象
* @return Comment
*/
public ResponseBean commentIsSave(Comment comment) {
return null;
}
/**
* 评论保存之前操作
* @param comment 评论内容信息对象
* @return Comment
*/
public Comment commentSaveBefore(Comment comment) {
return comment;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 附件代理
附件代理类AttachProxy: 插件可继承该类重写其中的方法,对附件上传等事件进行操作,内置方法如下
package com.perfree.plugin.proxy;
import com.perfree.model.Attach;
/**
* 附件代理: 插件可继承该类,对附件上传等事件进行操作
*/
public abstract class AttachProxy {
/**
* 附件存库之前的操作
* @param attach 附件信息对象
* @return Comment
*/
public Attach attachSaveBefore(Attach attach) {
return attach;
}
/**
* 附件存库之后的操作
* @param attach 附件信息对象
* @return Comment
*/
public Attach attachSaveAfter(Attach attach) {
return attach;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
更多插件代理正在持续增加中...