ssh配置文件详解

原创   学习笔记--ssh的配置文件 收藏

 

1. applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans "
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd ">

 <!--   //用这个代替下面的sessionFactory会更好,  dataSource不用定义了,因为hibernate.cfg.xml中已经定义了C3P0数据源
  <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation"
  value="classpath:hibernate.cfg.xml">
  </property>
  </bean>
 -->

 <!-- 定义数据源Bean,使用C3P0数据源实现 -->
 <bean id="dataSource" 
  class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <!-- 指定连接数据库的驱动 -->
  <property name="driverClass"
   value="oracle.jdbc.driver.OracleDriver" />
  <!-- 指定连接数据库的URL -->
  <property name="jdbcUrl"
   value="jdbc:oracle:thin:@192.168.36.11:1521:myproject" />
  <!-- 指定连接数据库的用户名 -->
  <property name="user" value="test" />
  <!-- 指定连接数据库的密码 -->
  <property name="password" value="test" />
  <!-- 指定连接数据库连接池的最大连接数 -->
  <property name="maxPoolSize" value="40" />
  <!-- 指定连接数据库连接池的最小连接数 -->
  <property name="minPoolSize" value="1" />
  <!-- 指定连接数据库连接池的初始化连接数 -->
  <property name="initialPoolSize" value="1" />
  <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
  <property name="maxIdleTime" value="20" />
 </bean>
 
 <!-- 配置SessionFactory -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.Oracle9Dialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    <!-- 使用c3p0连接池 -->
    <prop key="hibernate.connection.provider_class">
     org.hibernate.connection.C3P0ConnectionProvider
    </prop>
   </props>
  </property>

  <property name="mappingResources">
   <list>
    <value>
     com/happy/ssh/mapping/AdminMessage.hbm.xml
    </value>
   </list>
  </property>

  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>


 <!-- 配置TransactionManager -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

    <!--  配置事务拦截器 -->
 <bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <!--  下面定义事务传播属性-->
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>

 <!-- Dao定义 -->
 <bean id="adminMessageDao"
  class="com.happy.ssh.dao.AdminMessageDao">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>


 <!-- 定义BeanNameAutoProxyCreator创建代理( 注意: 可以定义多个BeanNameAutoProxyCreator)-->
 <bean
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
  <property name="beanNames">
   <!-- 下面是所有需要自动创建事务代理的bean,如*Dao,*Service等,-->
   <list>
    <value></value>
   </list>
   <!-- 此处可增加其他需要自动创建事务代理的bean-->
  </property>
  <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
  <property name="interceptorNames">
   <list>
    <value>transactionInterceptor</value>
    <!-- 此处可增加其他新的Interceptor -->
   </list>
  </property>
 </bean>
</beans>

2、hibernate.cfg.xml文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>

 <!-- 指定连接数据库的驱动 -->
 <property name="connection.driver_class">
  oracle.jdbc.driver.OracleDriver
 </property>
 <!-- 指定连接数据库的URL -->
 <property name="connection.url">
  jdbc:oracle:thin:@192.168.36.11:1521:myproject
 </property>
 <!-- 指定连接数据库的用户名 -->
 <property name="connection.username">test</property>
 <!-- 指定连接数据库的密码 -->
 <property name="connection.password">test</property>
 <!-- 指定连接数据库的方言 -->
 <property name="dialect">
  org.hibernate.dialect.Oracle9Dialect
 </property>

 <property name="format_sql">true</property>
 <!-- 输出调试语句 -->
 <property name="show_sql">true</property>

 
 <!-- 指定连接数据库连接池的最大连接数 -->
 <property name="c3p0.max_size">40</property>
 <!-- 指定连接数据库连接池的最小连接数 -->
 <property name="c3p0.min_size">1</property>
   
    <mapping resource="com/happy/ssh/mapping/AdminMessage.hbm.xml"/>
   
</session-factory>

</hibernate-configuration>

3. AdminMessage.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">

<hibernate-mapping package="com.hc360.model.domain">
 <class name="Role" table="SS_ROLES" dynamic-insert="true" dynamic-update="true">
  <id name="id" column="ID">
   <generator class="native"/>
  </id>
  <property name="name" column="NAME" not-null="true"/>
  <property name="descn" column="DESCN"/>
  <!--
  <set name="users" table="SS_USER_ROLE" lazy="true" inverse="true" cascade="save-update" batch-size="5">
   <key>
    <column name="ROLE_ID" not-null="true"/>
   </key>
   <many-to-many class="User" column="USER_ID" outer-join="auto"/>
  </set>
 -->
 </class>
</hibernate-mapping>

 

 

 

原创   Struts2,Spring,Hibernate整合例子一个 收藏

1.建立web项目
2.在web.xml  配置 struts2,和 spring ,
 <!-- 配置Struts2 -->
  <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher(struts的过滤器)
  </filter-class>
 </filter>
 <filter-mapping>(加载struts2)
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!--  配置Spring  -->
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener(spring监听器)
  </listener-class>
 </listener>
 <!--  查找spring配置文件 -->
 <context-param>(程序从此处开始加载.xml 文件,并执行)
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:*.xml</param-value>
 </context-param>
3.在src根目录下创建struts.xml文件
  <include file="struts-default.xml"/>固定格式,用到此包
4.在src根目录 创建hibernate.cfg.xml文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">
<hibernate-configuration>
<session-factory>
 <!-- 基本配置 -->
 <property name="dialect">
  org.hibernate.dialect.Oracle9Dialect
 </property>
 <property name="show_sql">false</property>
 <property name="format_sql">true</property>
 <property name="bytecode.use_reflection_optimizer">true</property>
 <property name="max_fetch_depth">2</property>
 <property name="default_batch_fetch_size">8</property>
 <property name="jdbc.batch_size">20</property>

</session-factory>
</hibernate-configuration>
系统给的文件 只需要拷贝,都是一些数据库库的基本配置

5.在src根目录 拷贝struts.properties文件

struts.objectFactory = spring   该项是告诉系统 用spring来 控制hibernate和Action
struts.action.extension=action  告诉系统访问时以什么结尾。可以改为:  do  例如:login.do   ,此处为:login.action
6.在src根目录下 创建applicationContext.xml
 配置数据源
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value ="oracle.jdbc.driver.OracleDriver"/> <!--jtds<property name="driverClassName" value ="net.sourceforge.jtds.jdbc.Driver"/>-->
    <property name="url" value ="jdbc:oracle:thin:@192.168.0.95:1521:ZXDB2"/>  <!--<property name="url" value="jdbc:jtds:sqlserver://localhost:1455/demo"></property>-->
    <property name="username" value ="test"/>
    <property name="password" value ="test"/>
   
   </bean>

 创建sessionFactory 工厂
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
     <ref local="dataSource"/>
    </property>
    <property name="configLocation">
     <value type="org.springframework.core.io.Resource">classpath:hibernate.cfg.xml</value>
    </property>
   </bean>
 考来用

7.创建 实体类
 就是写一个bean 含有get/set 方法
8.在实体类所在的目录下,写一个 类名.hbm.xml文件,在配置文件中添加属性
 <?xml version="1.0" encoding="utf-8"?>
  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">

  <hibernate-mapping>
      <class name="com.zx.test.model.User" table="LB_USER">
   <id name="id" type="java.lang.Long">主键的类型为Long
       <column name="ID"/>
       <generator class="sequence">
         <param name="sequence">SEQ_LB_USER</param>指定主键生成方式,必须在pl/sql创建主键生成方式
       </generator>
   </id>
   <property name="name" type="java.lang.String">
       <column name="name" length="20"/>
   </property>
   <property name="age" type="java.lang.Integer">
       <column name="age" length="2"/>
   </property>
   <property name="password" type="java.lang.String">
       <column name="password" length="20"/>
   </property>
   所有属性的name 必须与 bean中的set后的名称一样
      
      </class>
  </hibernate-mapping>

9.创建一个 Dao 实现操作方法
 
10 创建 service  调用  Dao中的方法
 
11.创建  Action   将service的得到的user 加到Action中

 
12.在applicationContext.xml 中配置
 将userDao注入到sessionFactory中
 将userService 注入到UserDao中
 将userAction 注入到 userService中
13.在struts.xml中 配置Action
   <package name="user" extends="struts-default(固定与include对应)" namespace="/use(访问时路径)r">
    <action name="userAdd(访问时路径)" class="userAction" method="userAdd">
       <result name="success">/userShow.jsp</result>
    </action>
  </package>

 此处配置了访问时的路径:/user/userAdd

14.将8中的配置文件 加入到 4 中
 <mapping resource="com/zx/test/model/User.hbm.xml" />
 引用配置文件

15.写jsp页面 表单提交到 Action

9.10.11:是 Action 调用 Service ,Service调用 Dao 也是分层的体现

Web.xml 是web工程的配置文件

ApplicationContext  是 spring的配置文件

Hibernate.hbm.xml 是hibernate的配置文件


建表是 注意创建主键时 name 为 表明

项目目录:



 

User.java

package com.zx.test.model;

public class User {

 private Long id;
 
 private String name;
 
 private Integer age;
 
 private String password;

   //   get/set方法
 
}

User.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">

<hibernate-mapping>
    <class name="com.zx.test.model.User" table="LB_USER">
        <id name="id" type="java.lang.Long">
            <column name="ID"/>
            <generator class="sequence">
              <param name="sequence">SEQ_LB_USER</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20"/>
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" length="2"/>
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="20"/>
        </property>
    
    </class>
</hibernate-mapping>

UserDao.java

package com.zx.test.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.zx.test.model.User;

public class UserDao extends HibernateDaoSupport {
 
 /**
  * 保存user
  * @param user
  */
 public void saveUser(User user){
//  spring自带方法 保存
  this.getHibernateTemplate().save(user);
 }

//update, delete ,findAll 方法同上,省略!

}

UserService.java

package com.zx.test.service;

import com.zx.test.dao.UserDao;
import com.zx.test.model.User;

public class UserService {

 private UserDao userDao;
 
 public void setUserDao(UserDao userDao) {
  this.userDao = userDao;
 }


 public void saveUser(User user){
  userDao.saveUser(user);
 }

// 在此处添加业务逻辑方法;
}

UserAction.java

package com.zx.test.action;

import com.opensymphony.xwork2.ActionSupport;
import com.zx.test.model.User;
import com.zx.test.service.UserService;

public class UserAction extends ActionSupport {

 private User user;
  
 public User getUser() {
  return user;
 }

 public void setUser(User user) {
  this.user = user;
 }
 
 
 private UserService userService ;

 public void setUserService(UserService userService) {
  this.userService = userService;
 }
 
 
 public String userAdd(){
  
  this.userService.saveUser(user);
  
  return SUCCESS;
 }

//添加action方法

}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd ">
   
<struts>
  <include file="struts-default.xml"/>
  <package name="user" extends="struts-default" namespace="/user">
    <action name="userAdd" class="userAction" method="userAdd">
       <result name="success">/userShow.jsp</result>
    </action>
  </package>
</struts>

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">
<hibernate-configuration>
<session-factory>
 <!-- 基本配置 -->
 <property name="dialect">
  org.hibernate.dialect.Oracle9Dialect
 </property>
 <property name="show_sql">false</property>
 <property name="format_sql">true</property>
 <property name="bytecode.use_reflection_optimizer">true</property>
 <property name="max_fetch_depth">2</property>
 <property name="default_batch_fetch_size">8</property>
 <property name="jdbc.batch_size">20</property>
 
 
 <mapping resource="com/zx/test/model/User.hbm.xml" />

</session-factory>
</hibernate-configuration>

applicationContext.xml


   
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value ="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value ="jdbc:oracle:thin:@192.168.0.95:1521:ZXDB2"/>
    <property name="username" value ="test"/>
    <property name="password" value ="test"/>
   
   </bean>
   
   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
     <ref local="dataSource"/>
    </property>
    <property name="configLocation">
     <value type="org.springframework.core.io.Resource">classpath:hibernate.cfg.xml</value>
    </property>
   </bean>
   
   <bean id="userDao" class="com.zx.test.dao.UserDao">
     <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>
   
   <bean id="userService" class="com.zx.test.service.UserService">
     <property name="userDao" ref="userDao"></property>
   </bean>
   
   <bean id="userAction" class="com.zx.test.action.UserAction" scope="prototype">
     <property name="userService" ref="userService"></property>
   </bean>

web.xml:

<!-- 配置Struts2 -->
  <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>

<init-param>
 <param-name>config</param-name>
 <param-value>/WEB-INF/struts.xml </param-value>
 
 </init-param>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!--  配置Spring  -->
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener  </listener-class>
 </listener>
 
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:*.xml</param-value>
 </context-param>

index.jsp:

<form action="<%=request.getContextPath() %>/user/userAdd.action" name="form1" method="post">
   
       userName: <input type ="text" name="user.name"><br>
       password:<input type="password" name="user.password"><br>
       age:<input type="text" name="user.age"><br>
       <input type="submit" value="submit">&nbsp;<input type="reset" value="reset">
    </form>

userShow.jsp

在第一行添加 struts2 的标签

即:<%@ taglib prefix="s" uri="/struts-tags" %>

<body>
 
       userName: <s:property value="user.name"/><br>
       password:<s:property value="user.password"/><br>
       age:<s:property value="user.age"/>
   
  </body>


struts.properties 文件可要可无!(可以自己配置)

<think>嗯,我现在需要处理用户关于SSH配置文件的问题。用户请求的是"SSH配置文件详解,包括常用参数和配置示例"。首先,我需要回顾之前提供的引用内容,从中提取有用的信息。用户给的引用[1]提到SSH有两个层级的配置文件:全局配置文件(/etc/ssh/ssh_config)和用户级别的配置文件(~/.ssh/config)。用户级别的配置可以覆盖全局设置,这对于设置特定主机的连接参数非常有用。同时,引用[2]详细列出了~/.ssh目录下常见的文件,比如各种密钥文件和known_hosts。引用[3]则给出了通过config文件配置密钥对连接的示例命令。引用[4]解释了SSH的基本作用和安全功能,而引用[5]提到的Spring配置文件似乎不相关,可能忽略。接下来,我要整理常用参数和配置示例。根据引用[1]和[2],常见参数应该包括Host、HostName、User、Port、IdentityFile、ConnectTimeout等。比如引用[3]中的"-i"选项对应配置文件中的IdentityFile,而端口、用户名的设置也需要包含。另外,引用[2]中的密钥文件路径可以作为示例中的值,比如id_rsa、id_ecdsa等。然后需要确认配置文件的层次结构。用户级别的配置优先级更高,这点在引用[1]中明确说明。因此,在介绍时需要分清楚全局和用户配置的位置,并强调加载顺序。目录权限的问题也不能遗漏,比如~/.ssh目录通常为700,私钥文件为600,否则SSH会拒绝使用,这点虽然用户没直接提到,但根据经验必须包含在内。配置示例部分需要覆盖多个场景。例如基本连接参数(主机名、用户、端口)、密钥认证、连接超时、跳板机设置(ProxyJump)、禁用主机密钥检查(仅测试环境使用)等。每个示例对应不同的实际应用需求,如安全登录、端口转发或批量管理服务器。还需要注意引用标记的正确使用。用户提供的引用[1]、[2]、[3]、[4]都需要在相关部分标注,比如文件路径和密钥类型的地方引用对应的文献。避免将引用[5]的内容混入,因为其不相关。最后检查是否遗漏重要参数。比如ServerAliveInterval保持连接,ForwardAgent用于密钥转发,这些常用但用户可能没提到的点需要补充。同时警告StrictHostKeyChecking的风险,避免生产环境禁用导致的安全隐患。组织成结构清晰的文档,分优先级结构、文件位置、常用参数、示例说明、权限管理等部分。确保术语准确,如主机别名、跳板机配置,并避免重复。生成的相关问题需要涵盖安全配置、密钥管理、多主机处理,以及权限问题排查,这些都与用户的问题紧密相关。</think> ### SSH配置文件详解:常用参数与配置示例 #### 一、配置文件层级与优先级 1. **全局配置文件** - 路径:`/etc/ssh/ssh_config` - 作用:对所有用户生效(需管理员权限修改)[^1]。 2. **用户级配置文件** - 路径:`~/.ssh/config` - 作用:仅对当前用户生效,**优先级高于全局配置**,可覆盖全局设置[^1]。 --- #### 二、核心参数说明 | **参数** | **作用** | **示例值** | |--------------------|--------------------------------------------------------------------------|--------------------------| | `Host` | 定义主机别名(支持通配符`*`) | `Host server1` | | `HostName` | 目标主机的实际IP或域名 | `192.168.1.100` | | `User` | 登录用户名 | `ubuntu` | | `Port` | SSH端口(默认`22`) | `2222` | | `IdentityFile` | 指定私钥文件路径 | `~/.ssh/id_rsa_server1` | | `ConnectTimeout` | 连接超时时间(秒) | `10` | | `StrictHostKeyChecking` | 是否检查主机密钥(`yes`/`no`,生产环境建议`yes`) | `no`(测试用) | | `ServerAliveInterval` | 保持连接的活跃间隔(秒) | `60` | | `ProxyJump` | 通过跳板机连接(SSH隧道) | `jump-user@jump-host` | | `ForwardAgent` | 是否启用SSH密钥转发(需谨慎开启) | `yes` | --- #### 三、典型配置示例 1. **基础配置:连接特定服务器** ```bash Host myserver HostName example.com User admin Port 2200 IdentityFile ~/.ssh/myserver_key # 指定私钥[^2] ``` **使用命令**:`ssh myserver` 2. **通过跳板机连接内网主机** ```bash Host jumphost HostName jump.example.com User jumper IdentityFile ~/.ssh/jump_key Host internal HostName 10.0.0.5 User internal-user ProxyJump jumphost # 自动通过跳板机连接[^3] ``` **使用命令**:`ssh internal` 3. **禁用主机密钥检查(仅测试环境)** ```bash Host dev-* StrictHostKeyChecking no UserKnownHostsFile /dev/null # 跳过保存密钥 ``` 4. **保持长连接防止超时** ```bash Host * ServerAliveInterval 30 ServerAliveCountMax 3 # 最多发送3次保活包 ``` --- #### 四、文件权限与安全 - **权限要求**: - `~/.ssh` 目录权限需为 `700`:`chmod 700 ~/.ssh` - 私钥文件权限需为 `600`:`chmod 600 ~/.ssh/id_rsa`[^2] - **密钥类型**: - RSA:`id_rsa`(常用) - ECDSA:`id_ecdsa`(更高安全性)[^2] --- #### 五、调试与验证 - **检查配置生效情况**: ```bash ssh -G myserver # 显示实际加载的配置 ``` - **连接测试**: ```bash ssh -Tv myserver # -v 输出详细日志 ``` > ⚠️ **注意**: > - 生产环境务必开启 `StrictHostKeyChecking` 避免中间人攻击[^4]。 > - 密钥转发(`ForwardAgent`)仅在信任的环境中使用。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值