自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (4)
  • 收藏
  • 关注

原创 Windows Git SSH keys:

windows 需要进入bash里面去运行。ssh-agent bashbash-3.1$ ssh-add id_rsabash-3.1$ ssh-add -l

2015-08-06 12:57:56 807

转载 x.509数字证书编码详解

转自:http://blog.sina.com.cn/s/blog_49b531af0102eahs.htmlx.509数字证书编码详解一、 X.509数字证书的编码X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN1语法进行编码。ASN1采用一个个的数据块来描述整个数据结构,每个数据块

2015-07-14 11:01:24 35632 3

转载 axis client 自定义对象序列化

axis 自定义对象序列化,只使用了beanMapping,未说明typeMapping,arrayMapping (参考axis user guide)基于Axis的自定义对象序列化 1. 在Axis服务端,注册自定义对象的序列化/反序列化器主要是修改axis安装目录下WEB-INF/server-config.wsdd文件。

2011-02-10 17:41:00 2071

转载 WS-Addressing

<br />为了让SOA的应用能够更加的成熟,一些标准化组织(主要有W3C,OASIS)对Web Services的功能进行了扩展,为此制定了一系列的WS-*规范。通过这些规范,使得Web Services在实际应用中的能力得到了很大的增强,这些能力主要体现在对服务质量的保障上,例如安全,可靠性,事务等等。其中,WS-Addressing规范作为一个基础,为其余的规范提供了重要的支持功能,因此有必要在了解其他规范前,首先深入了解WS-Addressing规范。本文将从概念上介绍该规范,并希望通过WSE3.0

2011-01-02 23:02:00 774

原创 HttpSessionBindingListener应用

如果需要对象X在被纳入session、移出session时分别执行某些任务的话:仅需使X继承HttpSessionBindingListener接口,然后将X纳入session即可( session.setAttribute("abc", X) ); 原理如下: 在tomcat5.5下,HttpSession的实现类位于 tomcat5.5/server/lib/catalina.jar中,以下是部分源码:public class StandardSession implements Ht

2010-11-16 16:31:00 646

原创 java常用的Listener分类

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。(通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发 sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。)Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前、发生后可以做一些必要的处理。目前 Servlet2.4 和 JSP2.0 常用的有7 个监听器接口,分为3 类: 1. Servlet上下文进行监

2010-10-09 16:33:00 1008

原创 Quartz在Spring中动态设置cronExpression

什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务,研究了下Quartz在Spring中的动态定时,发现: <bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property nam

2010-10-08 15:41:00 714

原创 Spring+Hibernate多数据源

Spring2.0.1以后的版本已经支持配置多数据源,并且可以在运行的时候动态加载不同的数据源。通过继承AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问12个数据源,每个数据源的表结构都是相同的,所以要求数据源的变动对于编码人员来说是透明,也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的配置如下: 利用ThreadLocal特性建立一个获得和设置上下文的类: package com.bcc.core.util.ds;public

2010-09-29 16:32:00 4065

原创 WebService -- 在AXIS下实现WS-Security

在AXIS下实现WS-Security的应用框架<br />待开发的应用开发框架基于Handler实现,将达到以下目标:此框架基于JAX-RPC环境下实现WS-Security应用,它可以部署到任何需要实现WS-Security的axis环境下的Web服务应用中,同时具体的应用程序不做任何编码修改。由于此基于Handler实现,我们有必要回顾一下Handler的一些基础知识。SOAP消息Handler能够访问代表RPC请求或者响应的SOAP消息。在JAX-RPC技术中,SOAP消息Handler可以部署在服

2010-09-26 11:00:00 3417 2

原创 webService - 使用Handler来增强WebService的功能

阅读本文前您需要以下的知识和工具: Apache axis1.1,并且会初步使用;Tomcat 4.0以上, 并且会初步使用;SOAP消息(SOAP Message)编程知识;JAX-RPC编程基础知识;Java安全编程基础知识。Handler的基本概念J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter。我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,这些Filter的功能往往是对请

2010-09-26 10:19:00 4164 1

原创 WebService - Security Core

在分别介绍了XML Signature和XML Encryption后,我们了解了如何用XML的形式来保证消息的完整性(Integrity)和机密性(Confidentiality)。如何将其运用到Web Service中从而保证Web Service的安全性,这就是WS-Security规范所描述的内容。我们知道Web Service的采用SOAP作为消息封装协议, 因此WS-Security规范主要描述了如何将XML Security(XML Signature和XML Encryption)与已有的安

2010-09-14 22:02:00 1498

原创 WebService - XML Encryption

利用XML Signature, 消息的完整性(Integrity)得到了保证。回顾之前提到的安全的三个基本概念--- Integrity, Confidentiality, Authentication, 现在该考虑消息的机密性的问题,虽然签名可以保证消息在传送的途中没有被篡改,但是并不能避免它被偷取。如果消息没有经过加密,那么某个敏感的信息就会被泄漏。与XML Signature类似,结合了XML技术和传统加密技术而产生的XML Encryption,也并不仅仅是加密XML文件那么简单,它提供了以下的功

2010-09-14 21:37:00 851

原创 WebService - XML Signature

XML Signature规范是将数字签名和XML组合而成的产物,不要以为XML Signature仅仅是将数字签名技术应用于XML文件。XML Signature包括以下的功能:       1.XML Signature可以对任何能够以URI形式(uniform resource identifier)定位的资源做签名。既包括与签名同在一个XML文件中的元素,也包括其他XML文件中的元素,甚至可以是非XML形式的资源(比如一个图形文件),只要能被URI定位到的资源都可以应用XML Signature. 

2010-09-14 21:06:00 1376

原创 Web Service Security --- Introduction

SOA目前普遍采用Web Services作为其实现技术,因为Web Service具有松耦合的特性,而这点对于SOA试图解决的问题显得尤为重要。服务的可发现性,平台无关性,接口的自描述性等特点赋予了Web Service这一特性。正是因为这一特性,Web Service被广泛的用于企业信息集成,其中既包括了企业内部的信息集成(不同部门的信息集成,遗留系统与新系统的信息集成),也包括了企业与企业之间的信息集成。同样也是因为它,使得通过服务与服务的组合而构成新的应用变得更加简单,也更加可行,这也是SOA中广泛

2010-09-14 20:45:00 622

原创 Tomcat6 类装载器分析

在研究Tomcat之前,一般是借用现有的UML工具分析Tomcat整体结构,但要分析Tomcat的流程就必须从分析Tomcat的StartUp入手。Tomcat的启动是从解析bat文件开始,bat文件最终调用org.apache.catalina.startup.Bootstrap开始类的加载。Tomcat6 类装载器的实现都是通过继承于JDK中的 java.lang.ClassLoader类。包括Bootstrap,System,Common和Webapp这四种类加载器来实现不同目录的类文件装载。   

2010-08-17 17:24:00 911

原创 java classLoader 体系结构

<br /><br />jvm classLoader architecture:Bootstrap ClassLoader/启动类加载器 <br />主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。Extension ClassLoader/扩展类加载器 <br />主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。System ClassLoader/系统类加载器

2010-08-17 15:57:00 542

原创 运行jar应用程序引用其他jar包的四种方法

<br />大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。<br /> 具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。<br /> <br />比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName<br />我们就只要在MANIFEST.MF里面添加如下一句话:<br />Main-Class: test.som

2010-08-12 15:55:00 1237

转载 实例讲解OSGI开发

<br /> OSGI,或者通俗点说JAVA动态模块系统,定义了一套模块应用开发的框架。OSGI容器实现方案如Knopflerfish, Equinox, and Apache Felix允许你把你的应用分成多个功能模块,这样通过依赖管理这些功能会更加方便。<br />和Servlet和EJB规范类似,OSGI规范包含两大块:一个OSGI容器需要实现的服务集合;一种OSGI容器和应用之间通信的机制。开发OSGI平台意味着你需要使用OSGI API编写你的应用,然后将其部署到OSGI容器中。从开发者的视角来看

2010-08-12 11:03:00 6299 1

转载 OSGi体系结构

<br />OSGi体系结构OSGi 的初衷是面向嵌入式系统的应用,支持在一个Java虚拟机上加载和启动多个Java应用程序。随着OSGi在Eclipse3.0上的应用成功,其逐渐成为构建纯插件结构的企业级应用软件系统的首选平台。<br /><br />OSGi 是一个纯插件的体系结构,OSGi 框架实现是一个最为核心的插件,逻辑实现分层见下面两张图:<br /><br /><br />             L0层Java执行环境OSGi最初规范定位到嵌入式系统,例如家电、汽车、手机等执行环境,所以

2010-08-11 15:27:00 1758

原创 OSGi入门

<br />借助网上的一些资料,对OSGi有了一些了解,将到目前的一些粗浅认识记录如下,由于自己对J2EE比较熟悉,所以借助与J2EE的对比来认识OSGi。 <br /><br />Module <br /><br />OSGi中具体实现Module的单位是bundle,一个bundle就是一个jar文件,其中包含所需的类文件和资源文件,同时必须包含一个描述文件;每个bundle都可以被独立打包、部署。看到这里,你是否会觉得跟J2EE中的WAR定义很类似? <br /><br />单从形式上来看,它们的确非

2010-08-11 13:56:00 751

原创 ClassLoader:由不同的类加载器实例加载,那么它们的类型是不相同的

同一个Class,如果是由不同的类加载器实例加载的,那么它们的类型是不相同的

2010-08-09 10:48:00 2549

原创 ThreadPoolExecutor 可扩展性

<br /> <br />到这里对于这个线程池还只是介绍了一小部分。ThreadPoolExecutor 具有很强的可扩展性,不过扩展它的前提是要熟悉它的工作方式。后面的文章将会介绍如何扩展 ThreadPoolExecutor 类。 <br />  java.util.concurrent.ThreadPoolExecutor 类提供了丰富的可扩展性。你可以通过创建它的子类来自定义它的行为。例如,我希望当每个任务结束之后打印一条消息,但我又无法修改任务对象,那么我可以这样写: <br />  除了 aft

2010-08-03 09:37:00 2555

原创 线程中的current thread not owner异常错误

<br />多线程常用的一些方法: wait(),wait(long),notify(),notifyAll()等<br /><br />这些方法是当前类的实例方法,<br /><br />wait()      是使持有对象锁的线程释放锁;<br />wait(long)是使持有对象锁的线程释放锁时间为long(毫秒)后,再次获得锁,wait()和wait(0)等价;<br />notify()    是唤醒一个正在等待该对象锁的线程,如果等待的线程不止一个,那么被唤醒的线程由jvm确定;<br />no

2010-08-03 09:20:00 1964

原创 Dynamic Proxy、 Proxy Pattern and Decorator Pattern

动态代理:在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,IHelloWorld接口定义的业务方法,HelloWorld是IHelloWorld接口的实现,HelloWorldProxy是 InvocationHandler接口实现。p

2010-07-28 18:48:00 771

原创 TCP/IP选项解析(Java Socket)

1. SO_LINGER/ SO_REUSEADDR    TCP正常的关闭过程如下(四次握手过程):  (FIN_WAIT_1) A       ---FIN--->       B(CLOSE_WAIT)  (FIN_WAIT_2) A         (TIME_WAIT)A          (TIME_WAIT)A        ---ACK->       B(CLOSED)    A端首先发送一个FIN请求给B端,要求关闭,发送后A段的TCP状态变更为FIN_WAIT_1,接收到FIN请求后B

2010-07-15 17:55:00 1371

原创 java.lang.OutOfMemoryError: unable to create new native thread

解决 - java.lang.OutOfMemoryError: unable to create new native thread工作中碰到过这个问题好几次了,觉得有必要总结一下,所以有了这篇文章,这篇文章分为三个部分:认识问题、分析问题、解决问题。 一、认识问题: 首先我们通过下面这个 测试程序 来认识这个问题:运行的环境 (有必要说明一下,不同环境会有不同的结果):32位 Windows XP, 1.5.0_22, myeclipse 6.6,测试程序: Java代码 import java.uti

2010-07-12 13:50:00 5347 1

转载 PermGen space

<br /> PermGen space<br />PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运

2010-07-12 13:12:00 605

转载 基于 J2EE 网银系统的安全系统解决方案概述

<br />简介: 本文介绍网络银行所普遍采用的安全技术和方案,将从数据和业务逻辑的两个角度详细地分析一般网络银行系统的安全需求,并据此引入以 PPDRR 为安全模型的安全设计方案。通过阅读本文,读者不但可以了解网上银行普遍采用的安全系统架构以及相关技术,而且对开发实际安全应用系统具有一定的指导意义。<br /> <br />摘要<br />随着中国加入 WTO,外国银行进入中国市场,国内银行的业务越来越多的移植到网络银行上,因此网上银行的需求日益增加。但是 Internet 的开放性特点,使网上银行面临种

2010-07-05 15:40:00 801

转载 Lucene学习总结之三:Lucene的索引文件格式(2)

 四、具体格式上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。4.1. 正向信息Index –> Segments (segments.gen, segments_N) –> Field(fnm,

2010-04-13 14:54:00 699

转载 Lucene学习总结之三:Lucene的索引文件格式(1)

 Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。当我们真正进入到Lucene源代码之中的时候,我们会发现:Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。本文详细

2010-04-13 14:49:00 790

转载 Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。在Lucene in action中,Lucene 的构架和过程如下图,说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个

2010-04-13 14:47:00 625

转载 Lucene学习总结之一:全文检索的基本原理

 一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据

2010-04-13 09:14:00 636

转载 Synchronized: 递归与死锁

所谓递归函数就是自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。 递归方式有两种:直接递归和间接递归,直接递归就是在函数中出现调用函数本身。间接递归,指函数中调用了其他函数,而该其他函数又调用了本函数。那什么时候使用递归呢?一般来说当你要在某段代码逻辑中使用循环迭代的时候但是迭代的次数在迭代之前无法知晓的情况下使用递归。打个比方你要在一个文件夹中查找某个文件,而这个文件夹底下有

2010-03-22 16:35:00 5622 2

翻译 异常处理之最佳实践(Best Practices for Exception Handling )

    关于异常处理最主要的问题是什么时间、怎么使用,在本文将含括一些关于异常处理的最佳实践方案。 异常的本质(这里有三种不同的情况会产生并抛出异常):程序错误:这种异常时由于程序的错误而产生的(例如,NullPointerException and IllegalArgumentException)。代码调用错误:客户端代码试图违反API协议调用接口。如果异常能提供一些有用的

2010-03-18 18:00:00 3334

转载 Java同步: synchronized用法

Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instan

2010-03-17 18:45:00 731

转载 Spring Security - Acegi 框架介绍

概述     对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的。Acegi Security(以下简称Acegi)是一个能为基于Spring的企业应用提供强大而灵活安全访问控制解决方案的框架,Acegi已经成为Spring官方的一个子项目,所以也称为Spring Security。它通过在Spring容器中配置一组Bean,充分利用Spring的IoC和AOP功能,提供声明式安全访问控

2010-03-16 13:40:00 3320 1

转载 Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)

理解 Comet 您可能已经听说过 Comet,因为它最近受到了一定的关注。Comet 有时也称反向 Ajax 或服务器 端推技术 (server-side push)。其思想很简单:将数据 直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用 程序 ,尤其是 HTTP 协议,那么您就会知道,这绝不简单。实现 Comet 风格的 Web 应用程序,同时保证在浏览

2010-03-12 13:54:00 735

转载 Html Meta标签详解

Meta标签详解,在网上转的,希望对大家有用  引言  您的个人网站即使做得再精彩,在“浩瀚如海”的网络空间中,也如一叶扁舟不易为人发现,如何推广个人网站,人们首先想到的方法无外乎以下几种:  ● 在搜索引擎中登录自己的个人网站  ● 在知名网站加入你个人网站的链接  ● 在论坛中发帖子宣传你的个人网站  很多人却忽视了HTML标签META的强大功效,一个好的META标签设计可以大

2010-03-11 14:36:00 552

原创 GSON(JSON字符串转换成一个相等的Java对象)

Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。代码例子:util.Date和sql.Date被转成长整形用于序列化传输   public class SQLDateSerializer implements JsonSerializer {  p

2010-03-10 11:38:00 7087

转载 视图简介

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。  对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。  视图是

2010-03-10 10:12:00 667

Just spring integration

In an Enterprise world, applications talking to other applications is inevitable. Developing Enterprise applications can be a big challenge, especially when it involves working with a mixture of disparate systems. Organizations continuously search for higher productivity associated with lower costs in bringing any Enterprise applications to the table. Over the last few years, messaging has been adopted as one of the preferred choices for Enterprise application communications. Implementing messaging solutions has become easier over the last few years, but the complexities of integration are still a big hurdle. Many frameworks were created to address the issues surrounding integration. One such framework from Spring developers is Spring Integration. It is designed to implement well-known Enterprise Application Integration (EAI) patterns. As a well-built framework, Spring Integration makes inter- and intra-application messaging a breeze. In this chapter, we look into Enterprise Integration from a general standpoint. We discuss the problem space that Spring Integration Framework is addressing. We introduce the framework very briefly and analyze Spring Integration’s role in creating a sound messaging solution.

2012-10-25

Comet: web服务器端推送demon

Comet: web服务器端推送demon,

2010-03-12

软件开发文档国家标准

1、可行性分析报告:说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。 2、项目开发计划:为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。 3、软件需求说明书(软件规格说明书):对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。 4、概要设计说明书:该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。 5、详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。 6、用户操作手册:本手册详细描述软件的功能、性能和用户界面,使用户对如何使用该软件得到具体的了解,为操作人员提供该软件各种运行情况的有关知识,特别是操作方法的具体细节。 7、测试计划:为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。 8、测试分析报告:测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见。 9、开发进度月报:该月报系软件人员按月向管理部门提交的项目进展情况报告,报告应包括进度计划与实际执行情况的比较、阶段成果、遇到的问题和解决的办法以及下个月的打算等。 10、项目开发总结报告:软件项目开发完成以后,应与项目实施计划对照,总结实际执行的情况,如进度、成果、资源利用、成本和投入的人力,此外,还需对开发工作做出评价,总结出经验和教训

2009-10-28

Trac+SSPI+SVN+Apache

windows下 Apache、SVN、Trac的集成安装, 并且进行域帐号集成验证

2008-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除