精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

巧用自定義注解,一行代碼搞定審計日志,你學會了嗎?

開發 項目管理
最常見的就是電商系統和支付系統,尤其是需求旺季的時候,經常有黑客專門攻擊這些電商系統,導致大量服務宕機,影響用戶正常下單。

一、簡介

任何一個軟件系統,都不可避免的會碰到【信息安全】這個詞,尤其是對于剛入行的新手,比如我,我剛入行的時候,領導讓我做一個數據報表導出功能,我就按照他的意思去做,至于誰有權限操作導出,導出的數據包含敏感信息應該怎么處理,后端接口是不是做了權限控制防止惡意抓取,這些問題我基本上不關心,我只想一心一意盡快實現需求,然后順利完成任務交付。

實際上,隨著工作閱歷的增加,你會越來越能感覺到,實現業務方提的需求,只是完成了軟件系統研發中的【能用】要求;服務是否【可靠】可能需要從架構層和運維方面去著手解決;至于是否【安全】、更多的需要從【信息安全】這個角度來思考,尤其是當我們的軟件系統面對外界的惡意干擾和攻擊時,是否依然能保障用戶正常使用,對于大公司,這個可能是頭等大事,因為可能一個很小很小的漏洞,一不小心可能會給公司帶來幾千萬的損失!

最常見的就是電商系統和支付系統,尤其是需求旺季的時候,經常有黑客專門攻擊這些電商系統,導致大量服務宕機,影響用戶正常下單。

像這樣的攻擊案例每天都有,有的公司甚至直接向黑客氣妥,給錢消災!

但是這種做法肯定不是長久之計,最重要的還是主動提升系統的【安全】防御系數。

由于信息安全所涉及的要求內容眾多,今天,我在這里僅僅向大家介紹其中關于【審計日志】的要求和具體應用,后續也會向大家介紹其他的要求。

【審計日志】,簡單的說就是系統需要記錄誰,在什么時間,對什么數據,做了什么樣的更改!這個日志數據是極其珍貴的,后面如果因業務操作上出了問題,可以很方便進行操作回查。

同時,任何一個 IT 系統,如果要過審,這項任務基本上也是必審項!

好了,需求我們清楚了,具體應用看下面!

二、實踐

實現【審計日志】這個需求,我們有一個很好的技術解決方案,就是使用 Spring 的切面編程,創建一個代理類,利用afterReturning和afterThrowing方法來實現日志的記錄。

具體實現步驟如下

  • 先創建審計日志表
CREATE TABLE `tb_audit_log` (
`id` bigint(20) NOT NULL COMMENT '審計日志,主鍵ID',
`table_name` varchar(500) DEFAULT '' COMMENT '操作的表名,多個用逗號隔開',
`operate_desc` varchar(200) DEFAULT '' COMMENT '操作描述',
`request_param` varchar(200) DEFAULT '' COMMENT '請求參數',
`result` int(10) COMMENT '執行結果,0:成功,1:失敗',
`ex_msg` varchar(200) DEFAULT '' COMMENT '異常信息',
`user_agent` text COLLATE utf8mb4_unicode_ci COMMENT '用戶代理信息',
`ip_address` varchar(32) NOT NULL DEFAULT '' COMMENT '操作時設備IP',
`ip_address_name` varchar(32) DEFAULT '' COMMENT '操作時設備IP所在地址',
`operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作時間',
`operate_user_id` varchar(32) DEFAULT '' COMMENT '操作人ID',
`operate_user_name` varchar(32) DEFAULT '' COMMENT '操作人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='審計日志表';
  • 然后編寫一個注解類
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
@Documented
public @interface SystemAuditLog {

/**
* 操作了的表名
* @return
*/
String tableName() default "";

/**
* 日志描述
* @return
*/
String description() default "";

}
  • 接著編寫一個代理類
@Component
@Aspect
public class SystemAuditLogAspect {

@Autowired
private SystemAuditLogService systemAuditLogService;

/**
* 定義切入點,切入所有標注此注解的類和方法
*/
@Pointcut("@within(com.example.demo.core.annotation.SystemAuditLog)|| @annotation(com.example.demo.core.annotation.SystemAuditLog)")
public void methodAspect() {
}

/**
* 方法調用前攔截
*/
@Before("methodAspect()")
public void before(){
System.out.println("SystemAuditLog代理 -> 調用方法執行之前......");
}

/**
* 方法調用后攔截
*/
@After("methodAspect()")
public void after(){
System.out.println("SystemAuditLog代理 -> 調用方法執行之后......");
}

/**
* 調用方法結束攔截
*/
@AfterReturning(value = "methodAspect()")
public void afterReturning(JoinPoint joinPoint) throws Exception {
System.out.println("SystemAuditLog代理 -> 調用方法結束攔截......");
//封裝數據
AuditLog entity = warpAuditLog(joinPoint);
entity.setResult(0);

//插入到數據庫
systemAuditLogService.add(entity);
}


/**
* 拋出異常攔截
*/
@AfterThrowing(value="methodAspect()", throwing="ex")
public void afterThrowing(JoinPoint joinPoint, Exception ex) throws Exception {
System.out.println("SystemAuditLog代理 -> 拋出異常攔截......");
//封裝數據
AuditLog entity = warpAuditLog(joinPoint);
entity.setResult(1);
//封裝錯誤信息
entity.setExMsg(ex.getMessage());

//插入到數據庫
systemAuditLogService.add(entity);
}


/**
* 封裝插入實體
* @param joinPoint
* @return
* @throws Exception
*/
private AuditLog warpAuditLog(JoinPoint joinPoint) throws Exception {
//獲取請求上下文
HttpServletRequest request = getHttpServletRequest();
//獲取注解上的參數值
SystemAuditLog systemAuditLog = getServiceMethodDescription(joinPoint);
//獲取請求參數
Object requestObj = getServiceMethodParams(joinPoint);
//封裝數據
AuditLog auditLog = new AuditLog();
auditLog.setId(SnowflakeIdWorker.getInstance().nextId());
//從請求上下文對象獲取相應的數據
if(Objects.nonNull(request)){
auditLog.setUserAgent(request.getHeader("User-Agent"));
//獲取登錄時的ip地址
auditLog.setIpAddress(IpAddressUtil.getIpAddress(request));
//調用外部接口,獲取IP所在地
auditLog.setIpAddressName(IpAddressUtil.getLoginAddress(auditLog.getIpAddress()));
}
//封裝操作的表和描述
if(Objects.nonNull(systemAuditLog)){
auditLog.setTableName(systemAuditLog.tableName());
auditLog.setOperateDesc(systemAuditLog.description());
}
//封裝請求參數
auditLog.setRequestParam(JSON.toJSONString(requestObj));
//封裝請求人
if(Objects.nonNull(requestObj) && requestObj instanceof BaseRequest){
auditLog.setOperateUserId(((BaseRequest) requestObj).getLoginUserId());
auditLog.setOperateUserName(((BaseRequest) requestObj).getLoginUserName());
}
auditLog.setOperateTime(new Date());
return auditLog;
}


/**
* 獲取當前的request
* 這里如果報空指針異常是因為單獨使用spring獲取request
* 需要在配置文件里添加監聽
*
* 如果是spring項目,通過下面方式注入
* <listener>
* <listener-class>
* org.springframework.web.context.request.RequestContextListener
* </listener-class>
* </listener>
*
* 如果是springboot項目,在配置類里面,通過下面方式注入
* @Bean
* public RequestContextListener requestContextListener(){
* return new RequestContextListener();
* }
* @return
*/
private HttpServletRequest getHttpServletRequest(){
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes)ra;
HttpServletRequest request = sra.getRequest();
return request;
}

/**
* 獲取請求對象
* @param joinPoint
* @return
* @throws Exception
*/
private Object getServiceMethodParams(JoinPoint joinPoint) {
Object[] arguments = joinPoint.getArgs();
if(Objects.nonNull(arguments) && arguments.length > 0){
return arguments[0];
}
return null;
}


/**
* 獲取自定義注解里的參數
* @param joinPoint
* @return 返回注解里面的日志描述
* @throws Exception
*/
private SystemAuditLog getServiceMethodDescription(JoinPoint joinPoint) throws Exception {
//類名
String targetName = joinPoint.getTarget().getClass().getName();
//方法名
String methodName = joinPoint.getSignature().getName();
//參數
Object[] arguments = joinPoint.getArgs();
//通過反射獲取示例對象
Class targetClass = Class.forName(targetName);
//通過實例對象方法數組
Method[] methods = targetClass.getMethods();
for(Method method : methods) {
//判斷方法名是不是一樣
if(method.getName().equals(methodName)) {
//對比參數數組的長度
Class[] clazzs = method.getParameterTypes();
if(clazzs.length == arguments.length) {
//獲取注解里的日志信息
return method.getAnnotation(SystemAuditLog.class);
}
}
}
return null;
}
}

最后,只需要在對應的接口或者方法上添加審計日志注解即可

@RestController
@RequestMapping("api")
public class LoginController {

/**
* 用戶登錄,添加審計日志注解
* @param request
*/
@SystemAuditLog(tableName = "tb_user", description = "用戶登錄")
@PostMapping("login")
public void login(UserLoginDTO request){
//登錄邏輯處理
}
}
  • 相關的實體類
@Data
public class AuditLog {

/**
* 審計日志,主鍵ID
*/
private Long id;

/**
* 操作的表名,多個用逗號隔開
*/
private String tableName;

/**
* 操作描述
*/
private String operateDesc;

/**
* 請求參數
*/
private String requestParam;

/**
* 執行結果,0:成功,1:失敗
*/
private Integer result;

/**
* 異常信息
*/
private String exMsg;

/**
* 請求代理信息
*/
private String userAgent;

/**
* 操作時設備IP
*/
private String ipAddress;

/**
* 操作時設備IP所在地址
*/
private String ipAddressName;

/**
* 操作時間
*/
private Date operateTime;


/**
* 操作人ID
*/
private String operateUserId;

/**
* 操作人
*/
private String operateUserName;
}
public class BaseRequest implements Serializable {

/**
* 請求token
*/
private String token;

/**
* 登錄人ID
*/
private String loginUserId;

/**
* 登錄人姓名
*/
private String loginUserName;

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}

public String getLoginUserId() {
return loginUserId;
}

public void setLoginUserId(String loginUserId) {
this.loginUserId = loginUserId;
}

public String getLoginUserName() {
return loginUserName;
}

public void setLoginUserName(String loginUserName) {
this.loginUserName = loginUserName;
}
}

@Data
public class UserLoginDTO extends BaseRequest {

/**
* 用戶名
*/
private String userName;

/**
* 密碼
*/
private String password;
}

三、小結

整個程序的實現過程,主要使用了 Spring AOP 特性,對特定方法進行前、后攔截,從而實現業務方的需求。

在下篇文章中,我們會詳細介紹 Spring AOP 的使用!

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-02-17 07:10:39

Nest自定義注解

2022-06-27 08:16:34

JSON格式序列化

2024-02-19 07:52:40

CSSJS屬性

2024-08-26 08:27:18

2022-08-08 08:17:43

類隔離加載器自定義類

2024-11-27 11:07:20

vue計算屬性

2023-11-27 07:33:55

2024-01-18 09:38:00

Java注解JDK5

2023-11-01 07:28:31

MySQL日志維護

2022-12-22 08:14:54

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2022-11-08 08:45:30

Prettier代碼格式化工具

2024-09-26 09:10:08

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2024-02-04 00:00:00

Effect數據組件

2023-01-10 08:43:15

定義DDD架構

2022-01-17 07:50:37

Go代碼規范

2023-04-04 09:13:15

點贊
收藏

51CTO技術棧公眾號

一级黄色录像大片| 蜜臀av粉嫩av懂色av| 免费在线观看av网站| 美女免费视频一区| www.亚洲一区| 无套内谢丰满少妇中文字幕| 波多野结衣精品| 国产亚洲成aⅴ人片在线观看 | 久久精品女人天堂av免费观看 | 欧美日韩五区| 一区二区三区中文字幕精品精品 | 国产调教打屁股xxxx网站| 交100部在线观看| 国产精品美女久久福利网站| 国产精品一区二区免费| 波多野结衣黄色网址| 午夜精品999| 亚洲午夜久久久久久久| www.四虎精品| 日日夜夜一区| 欧美性xxxx在线播放| 在线视频一二三区| 日韩偷拍一区二区| 夫妇交换中文字幕| 国产精东传媒成人av电影| 欧美系列亚洲系列| 奇米精品一区二区三区| 中文字幕免费高清电视剧网站在线观看| 成人av在线资源网| 92国产精品久久久久首页| 亚洲精品男人的天堂| 欧美天天在线| 久久精品国产一区| 91麻豆制片厂| 免费成人av| 亚洲精品乱码久久久久久金桔影视| 国产福利在线免费| julia一区二区三区中文字幕| 午夜久久福利影院| 真人抽搐一进一出视频| 韩国av网站在线| 国产精品美女久久福利网站 | 一本色道久久综合亚洲精品酒店 | 国产三级在线| ww久久中文字幕| 国产一区二区自拍| 免费看av毛片| 国产成人精品亚洲日本在线桃色 | 干日本少妇首页| 成人一级福利| 亚洲国产va精品久久久不卡综合| 中国一级黄色录像| 激情影院在线观看| 亚洲欧洲综合另类| 91成人在线视频观看| 麻豆视频网站在线观看| 国产精品毛片大码女人| 亚洲乱码一区二区三区三上悠亚| 番号集在线观看| 中文字幕精品—区二区四季| 色一情一乱一伦一区二区三区| 邻居大乳一区二区三区| 久久久99精品免费观看不卡| 欧美日韩国产综合在线| 飘雪影院手机免费高清版在线观看| 91在线一区二区三区| 久久99影院| 久久观看最新视频| 99视频免费看| 成人性色生活片| 国产伦精品一区二区三区视频孕妇| 亚洲AV无码成人片在线观看| 成人免费视频视频在线观看免费| 国产v亚洲v天堂无码| 色香蕉在线视频| 久久久亚洲高清| 亚洲电影免费| 91精品久久| 午夜成人免费视频| 久久久久久三级| 国产精品高清一区二区| 精品美女一区二区| 国产熟妇搡bbbb搡bbbb| 日本不卡免费一区| 一区二区三区在线播放欧美| 懂色av蜜桃av| 国自产拍偷拍福利精品免费一 | 亚洲电影在线观看| aaaaa级少妇高潮大片免费看| 日韩av有码| 久久久久久久一| aaaaaa毛片| gogo久久日韩裸体艺术| 视频一区中文字幕国产| 国产91亚洲精品| 国产又黄又粗又长| 不卡视频在线看| 亚洲国产午夜伦理片大全在线观看网站 | 88久久精品| 精品国产1区2区3区| 无码人妻精品一区二区中文| 欧美hd在线| 2019中文字幕免费视频| 又骚又黄的视频| 成人性视频网站| 亚洲国产精品一区二区第一页| 尤物视频在线看| 一本到高清视频免费精品| 波多野结衣国产精品| 天堂99x99es久久精品免费| 神马国产精品影院av| 成年人免费高清视频| 韩国毛片一区二区三区| 欧洲精品在线一区| 日本成人不卡| 欧美日韩精品一二三区| 久久偷拍免费视频| 欧美成人精品| 国产精品永久免费| 手机亚洲第一页| 亚洲综合网站在线观看| 尤物国产在线观看| 欧美欧美黄在线二区| 久久久欧美精品| 99视频精品免费| 国产喷水福利在线视频| 久久网站最新地址| 国产美女主播在线| 成人噜噜噜噜| 中文字幕日韩欧美在线| 在线观看日本视频| www.久久精品| 大荫蒂性生交片| 国语精品视频| 日韩中文字幕免费视频| 精品成人无码久久久久久| 99久久99久久精品免费观看| 欧美 亚洲 视频| 999精品嫩草久久久久久99| 亚洲小视频在线观看| 日韩在线视频免费播放| 成人18视频日本| 免费人成在线观看视频播放| 蜜桃精品视频| 久久香蕉频线观| 国产精品国产三级国产aⅴ | 久草精品电影| 91吃瓜在线观看| 精品91自产拍在线观看一区| 国产免费无码一区二区视频| 狠狠色狠狠色综合系列| 在线综合视频网站| 婷婷久久免费视频| 久久久成人av| 国产农村妇女毛片精品| 亚洲日本电影在线| 天堂在线精品视频| 一区二区中文字| 91视频婷婷| 欧美xxx黑人xxx水蜜桃| 亚洲成人黄色在线观看| 亚洲精品午夜久久久久久久| 成人av在线一区二区三区| 日本人体一区二区| 婷婷成人在线| 国产精品极品在线| 人妻av中文系列| 91福利在线免费| 亚洲精品成人久久| 五月婷婷激情视频| 中文天堂在线一区| aaaaaaaa毛片| 亚洲三级观看| 日本一区二区精品视频| 国产精品久久久久久吹潮| 日韩一区二区三区xxxx| 国产黄色一级大片| 五月天久久比比资源色| 亚洲AV无码片久久精品| 久久激五月天综合精品| 强开小嫩苞一区二区三区网站| 日韩在线精品强乱中文字幕| 国内精品视频在线| 国产精品天堂| 欧美一区二区成人6969| 亚洲视频免费播放| 国产偷v国产偷v亚洲高清| 日韩高清第一页| 欧美片第1页综合| 免费成人看片网址| 一区在线不卡| 91精品国产高清久久久久久| 超碰免费97在线观看| 欧美一三区三区四区免费在线看 | 亚洲成人免费在线观看| 蜜臀av一区二区三区有限公司| 免费久久精品视频| 999一区二区三区| 日韩激情一区| 国产日韩精品一区观看| 本网站久久精品| 国内精品美女av在线播放| 亚洲欧美视频一区二区| 亚洲精品大尺度| 国产乱淫av免费| 色老综合老女人久久久| 免看一级a毛片一片成人不卡| 久久综合久久久久88| 99视频在线观看视频| 久久亚洲一区| 日韩精品视频在线观看视频| 欧美色图国产精品| 国产综合 伊人色| 国产精品777777在线播放| 国产高清在线不卡| 爱看av在线| 欧美日韩成人网| 日本不卡在线| 亚洲日韩欧美视频| 欧美视频一二区| 欧美一区二区高清| 国产一区二区三区中文字幕| 色香色香欲天天天影视综合网| 久草网在线观看| 中文字幕一区在线| 69视频在线观看免费| 99久久综合精品| 2025中文字幕| 国产一区二区三区免费看 | 久久久久久a亚洲欧洲aⅴ| www.久久久.com| 国产精品国产福利国产秒拍| 免费成人在线电影| 久久久在线免费观看| 成人福利在线观看视频| 日韩在线观看免费全集电视剧网站| 欧美日韩国产中文字幕在线| 亚洲成人免费网站| www.亚洲黄色| 日韩欧美亚洲另类制服综合在线| 一女二男一黄一片| 欧美日韩一区二区三区不卡| 一级片视频在线观看| 精品国产91久久久久久| 日本熟妇毛茸茸丰满| 亚洲午夜精品网| 国产一级做a爱免费视频| 亚洲免费观看高清在线观看| 久久免费看少妇高潮v片特黄| 一区视频在线播放| 青花影视在线观看免费高清| 欧美国产亚洲另类动漫| 午夜影院黄色片| 国产精品免费久久| 欧美另类69xxxx| 国产精品国产成人国产三级| 国产又黄又粗又猛又爽的| 中文av一区特黄| 任我爽在线视频| ...中文天堂在线一区| 日韩三级在线观看视频| 亚洲美女视频一区| 国产一级在线播放| 欧美日韩国产中文精品字幕自在自线| 日本一级片免费看| 日本韩国视频一区二区| 中文字幕观看视频| 在线播放欧美女士性生活| 99热这里只有精| 亚洲成色777777女色窝| 四虎影视2018在线播放alocalhost| 亚洲男人的天堂在线| wwwww在线观看免费视频| 日韩亚洲欧美中文在线| 日本在线视频www鲁啊鲁| 97超级碰碰人国产在线观看| 成人短视频app| 午夜精品久久久久| 在线免费看黄色片| 久久久午夜精品理论片中文字幕| 国产又粗又猛又爽视频| 国产精品久久夜| 青青草成人免费| 黑人巨大精品欧美一区二区三区 | 国内精品久久久久久久果冻传媒| 偷拍一区二区| 在线看成人av电影| 狠狠爱成人网| 久久99999| 成熟亚洲日本毛茸茸凸凹| 可以直接看的无码av| 国产精品免费网站在线观看| 国产乡下妇女做爰| 欧美性大战久久久久久久蜜臀 | 国产91丝袜在线18| 黄瓜视频污在线观看| 亚洲人成影院在线观看| 久久亚洲精品国产| 欧美日韩国产综合视频在线观看| 亚洲伊人婷婷| 久久精品视频观看| 97在线视频国产| 91精品国产一区二区在线观看| 久久99精品国产一区二区三区| 第一sis亚洲原创| 野外做受又硬又粗又大视频√| 青椒成人免费视频| 精品国产av色一区二区深夜久久| 国产精品久久久久久久久搜平片| 97人人澡人人爽人人模亚洲 | 亚洲一区二区高清| 国产三区在线视频| 国产成人精品免费| 久久午夜精品视频| 一本大道久久a久久精二百| 精品国产va久久久久久久| 伊人av综合网| 亚洲女同志freevdieo| 97在线资源站| 天天揉久久久久亚洲精品| 久久久久狠狠高潮亚洲精品| 福利一区二区在线观看| 九九热视频在线免费观看| 色噜噜狠狠色综合中国 | 亚洲欧美一区二区三区在线 | 亚洲精品国产无套在线观| 日韩精选在线观看| 亚洲毛片在线观看| 九色porny自拍视频在线播放 | 日韩av片专区| 久久精品免费在线观看| 日本一级片免费| 欧美精品久久天天躁| a视频网址在线观看| 日韩av片电影专区| 亚洲黄页在线观看| 久久网站免费视频| 97se亚洲国产综合自在线不卡 | 黄色免费在线观看| 国产精品免费视频xxxx| 精品久久精品| 91日韩在线视频| √新版天堂资源在线资源| 国产精品1234| 国产精品视频一区二区三区四蜜臂| 久久久性生活视频| 成人不卡免费av| 国产成人精品a视频一区| 亚洲国产精品成人av| 17videosex性欧美| 国产一区喷水| 国产九九精品| 国产女主播喷水高潮网红在线| 欧美日韩视频免费播放| 全部免费毛片在线播放网站| 欧美亚洲成人xxx| 伊人久久大香线蕉无限次| 欧美牲交a欧美牲交aⅴ免费真| 91免费观看在线| 久久久久久无码精品大片| 亚洲最大中文字幕| 另类一区二区三区| 国产一区一区三区| 国产丶欧美丶日本不卡视频| 九九热这里有精品视频| 精品三级av在线| 日韩脚交footjobhdboots| 欧美视频观看一区| 麻豆一区二区三| 卡通动漫亚洲综合| 337p日本欧洲亚洲大胆精品| 色综合桃花网| 日韩欧美电影一区二区| 久久99精品国产麻豆婷婷洗澡| 91久久国产综合| 亚洲第一av在线| free欧美| 永久免费网站视频在线观看| 国产白丝精品91爽爽久久 | 午夜视频在线看| 亚洲最大福利视频| 国产精品久久777777毛茸茸| 中文字幕在线观看免费高清| 88在线观看91蜜桃国自产| 牛牛精品视频在线| 日本不卡高清视频一区| 精一区二区三区| 欧美日韩综合在线观看| 中文字幕精品www乱入免费视频| 国产精品一区二区三区www| 欧美精品一区二区三区三州| 国产女同性恋一区二区| 国产av无码专区亚洲av| 欧美中文在线字幕| 亚洲天堂一区二区三区四区| 五月天激情小说| 欧美军同video69gay| 免费h视频在线观看| 国产高清免费在线| 久久久久久久网|