Spring Security Reference-1

Spring安全参考

作者

Ben Alex  ,  Luke Taylor  ,  Rob Winch  ,  Gunnar Hillert

4.2.3.RELEASE

本文档的副本可以为您自己使用并分发给其他人,前提是您不收取这些副本的任何费用,并进一步规定每份副本均包含此版权声明,无论是以印刷版还是电子版分发。


目录

一,前言
1.入门 2.介绍
2.1。什么是Spring Security? 2.2。历史 2.3。释放编号 2.4。获得Spring安全
2.4.1。用法与Maven
Maven仓库 Spring框架
2.4.2。摇篮
Gradle存储库 使用Spring 4.0.x和Gradle
2.4.3。项目模块
核心 - 弹簧安全core.jar 远程处理 - spring-security-remoting.jar Web - spring-security-web.jar 配置 - spring-security-config.jar LDAP - spring-security-ldap.jar ACL - spring-security-acl.jar CAS - spring-security-cas.jar OpenID - spring-security-openid.jar 测试 - 弹簧安全test.jar
2.4.4。检出来源
3. Spring Security 4.2的新特性
3.1。网络改进 3.2。配置改进 3.3。
4.样品和指南(从这里开始) 5. Java配置
5.1。您好网络安全Java配置
5.1.1。AbstractSecurityWebApplicationInitializer 5.1.2。AbstractSecurityWebApplicationInitializer不存在Spring 5.1.3。AbstractSecurityWebApplicationInitializer与Spring MVC
5.2。HttpSecurity 5.3。Java配置和表单登录 5.4。授权请求 5.5。处理注销
5.5.1。LogoutHandler 5.5.2。LogoutSuccessHandler 5.5.3。更多注销相关参考
5.6。认证
5.6.1。内存认证 5.6.2。JDBC身份验证 5.6.3。LDAP认证 5.6.4。的AuthenticationProvider 5.6.5。的UserDetailsS​​ervice 5.6.6。LDAP认证
5.7。多个HttpSecurity 5.8。方法安全
5.8.1。EnableGlobalMethodSecurity 5.8.2。GlobalMethodSecurityConfiguration
5.9。后处理配置的对象 5.10。自定义DSL
6.安全命名空间配置
6.1。介绍
6.1.1。命名空间的设计
6.2。安全命名空间配置入门
6.2.1。web.xml配置 6.2.2。最小的<http>配置 6.2.3。表单和基本登录选项
设置默认的登录后目的地
6.2.4。注销处理 6.2.5。使用其他验证提供程序
添加密码编码器
6.3。高级Web功能
6.3.1。记住我认证 6.3.2。添加HTTP / HTTPS通道安全性 6.3.3。会话管理
检测超时 并发会话控制 会话固定攻击保护
6.3.4。OpenID支持
属性交换
6.3.5。响应头 6.3.6。添加你自己的过滤器
设置一个自定义的AuthenticationEntryPoint
6.4。方法安全
6.4.1。<global-method-security>元素
使用protect-pointcut添加安全性切入点
6.5。默认AccessDecisionManager
6.5.1。自定义AccessDecisionManager
6.6。验证管理器和命名空间
7.示例应用程序
7.1。教程示例 7.2。往来 7.3。LDAP示例 7.4。OpenID示例 7.5。CAS样品 7.6。JAAS样品 7.7。预认证示例
8.春季安全社区
8.1。问题跟踪 8.2。成为参与 8.3。更多信息
II。架构与实现
9.技术概述
9.1。运行环境 9.2。核心组件
9.2.1。SecurityContextHolder,SecurityContext和认证对象
获取有关当前用户的信息
9.2.2。UserDetailsS​​ervice 9.2.3。一个GrantedAuthority 9.2.4。概要
9.3。认证
9.3.1。Spring Security中的身份验证是什么? 9.3.2。直接设置SecurityContextHolder内容
9.4。Web应用程序中的身份验证
9.4.1。的ExceptionTranslationFilter 9.4.2。的AuthenticationEntryPoint 9.4.3。认证机制 9.4.4。在请求之间存储SecurityContext
9.5。Spring Security中的访问控制(授权)
9.5.1。安全和AOP建议 9.5.2。安全对象和AbstractSecurityInterceptor
什么是配置属性? RunAsManager AfterInvocationManager 扩展安全对象模型
9.6。本土化
10.核心服务
10.1。AuthenticationManager,ProviderManager和AuthenticationProvider
10.1.1。擦除成功身份验证的证书 10.1.2。比如DaoAuthenticationProvider
10.2。UserDetailsS​​ervice实现
10.2.1。内存认证 10.2.2。JdbcDaoImpl
权威组织
10.3。密码编码
10.3.1。什么是散列? 10.3.2。添加盐到哈希 10.3.3。散列和认证
10.4。杰克逊支持
III。测试
11.测试方法安全性
11.1。安全测试设置 11.2。@WithMockUser 11.3。@WithAnonymousUser 11.4。@WithUserDetails 11.5。@WithSecurityContext 11.6。测试元注释
12. Spring MVC测试集成
12.1。设置MockMvc和Spring Security 12.2。SecurityMockMvcRequestPostProcessors
12.2.1。使用CSRF保护进行测试 12.2.2。在Spring MVC测试中以用户身份运行测试 12.2.3。在Spring MVC测试中使用RequestPostProcessor作为用户运行
作为用户在Spring MVC测试中使用注释运行
12.2.4。测试HTTP基本认证
12.3。SecurityMockMvcRequestBuilders
12.3.1。测试基于表单的认证 12.3.2。测试注销
12.4。SecurityMockMvcResultMatchers
12.4.1。未经认证的声明 12.4.2。认证断言
IV。Web应用程序安全
13.安全过滤器链
13.1。的DelegatingFilterProxy 13.2。的FilterChainProxy
13.2.1。绕过滤网链
13.3。过滤器排序 13.4。请求匹配和HttpFirewall 13.5。与其他基于过滤器的框架一起使用 13.6。高级命名空间配置
14.核心安全筛选器
14.1。FilterSecurityInterceptor 14.2。的ExceptionTranslationFilter
14.2.1。的AuthenticationEntryPoint 14.2.2。AccessDeniedHandler 14.2.3。SavedRequest和RequestCache接口
14.3。SecurityContextPersistenceFilter
14.3.1。SecurityContextRepository
14.4。UsernamePasswordAuthenticationFilter
14.4.1。认证成功和失败的应用流程
15. Servlet API集成
15.1。Servlet 2.5+集成
15.1.1。HttpServletRequest.getRemoteUser() 15.1.2。HttpServletRequest.getUserPrincipal() 15.1.3。HttpServletRequest.isUserInRole(字符串)
15.2。Servlet 3+集成
15.2.1。HttpServletRequest.authenticate(HttpServletRequest的,HttpServletResponse的) 15.2.2。HttpServletRequest.login(字符串,字符串) 15.2.3。HttpServletRequest.logout() 15.2.4。AsyncContext.start(可运行) 15.2.5。异步Servlet支持
15.3。Servlet 3.1+集成
15.3.1。HttpServletRequest的#changeSessionId()
16.基本和摘要式身份验证
16.1。BasicAuthenticationFilter一样
16.1.1。组态
16.2。DigestAuthenticationFilter
16.2.1。组态
17.记住我的身份验证
17.1。概观 17.2。简单的基于哈希的令牌方法 17.3。持续令牌方法 17.4。记住我的接口和实现
17.4.1。TokenBasedRememberMeServices 17.4.2。对PersistentTokenBasedRememberMeServices
18.跨站点请求伪造(CSRF)
18.1。CSRF攻击 18.2。同步器令牌模式 18.3。何时使用CSRF保护
18.3.1。CSRF保护和JSON 18.3.2。CSRF和无状态浏览器应用程序
18.4。使用Spring Security CSRF保护
18.4.1。使用适当的HTTP动词 18.4.2。配置CSRF保护 18.4.3。包含CSRF令牌
表单提交 Ajax和JSON请求 CookieCsrfTokenRepository
18.5。CSRF警告
18.5.1。超时 18.5.2。在登录 18.5.3。注销 18.5.4。多部分(文件上传)
在Spring Security之前放置MultipartFilter 包含CSRF令牌
18.5.5。HiddenHttpMethodFilter
18.6。覆盖默认值
19. CORS 20.安全性HTTP响应头
20.1。默认安全标题
20.1.1。缓存控制 20.1.2。内容类型选项 20.1.3。HTTP严格传输安全(HSTS) 20.1.4。HTTP公钥密封(HPKP) 20.1.5。X-框架,选项 20.1.6。X-XSS-保护 20.1.7。内容安全策略(CSP)
配置内容安全策略 其他资源
20.1.8。推荐人政策
配置引用者策略
20.2。自定义标题
20.2.1。静态标题 20.2.2。头书写者 20.2.3。DelegatingRequestMatcherHeaderWriter
21.会议管理
21.1。SessionManagementFilter 21.2。SessionAuthenticationStrategy 21.3。并发控制
21.3.1。查询当前已通过身份验证的用户及其会话的SessionRegistry
22.匿名身份验证
22.1。概观 22.2。组态 22.3。AuthenticationTrustResolver
23. WebSocket安全
23.1。WebSocket配置 23.2。WebSocket身份验证 23.3。WebSocket授权
23.3.1。WebSocket授权说明
消息类型的WebSocket授权 目的地上的WebSocket授权
23.3.2。出站消息
23.4。执行同源策略
23.4.1。为什么同源? 23.4.2。Spring WebSocket允许的起源 23.4.3。添加CSRF到Stomp头 23.4.4。在WebSockets中禁用CSRF
23.5。使用SockJS
23.5.1。SockJS和框架选项 23.5.2。SockJS&Relaxing CSRF
V.授权
24.授权体系结构
24.1。当局 24.2。预调用处理
24.2.1。AccessDecisionManager 24.2.2。基于投票的AccessDecisionManager实现
的RoleVoter AuthenticatedVoter使用 自定义选民
24.3。调用处理后 24.4。分层角色
25.安全的对象实现
25.1。AOP联盟(MethodInvocation)安全拦截器
25.1.1。显式MethodSecurityInterceptor配置
25.2。AspectJ(JoinPoint)安全拦截器
26.基于表达式的访问控制
26.1。概观
26.1.1。常见的内置表达式
26.2。Web安全表达式
26.2.1。在Web安全表达式中引用Bean 26.2.2。Web安全表达式中的路径变量
26.3。方法安全表达式
26.3.1。@Pre和@Post注释
访问控制使用@PreAuthorize和@PostAuthorize 使用@PreFilter和@PostFilter进行过滤
26.3.2。内置表达式
PermissionEvaluator接口 方法安全元注释
VI。其他主题
27.域对象安全(ACL)
27.1。概观 27.2。关键概念 27.3。入门
28.预认证方案
28.1。预认证框架类
28.1.1。AbstractPreAuthenticatedProcessingFilter
J2eeBasedPreAuthenticatedWebAuthenticationDetailsS​​ource
28.1.2。PreAuthenticatedAuthenticationProvider 28.1.3。Http403ForbiddenEntryPoint
28.2。具体的实现
28.2.1。请求头认证(Siteminder)
Siteminder示例配置
28.2.2。Java EE容器认证
29. LDAP认证
29.1。概观 29.2。在Spring Security中使用LDAP 29.3。配置LDAP服务器
29.3.1。使用嵌入式测试服务器 29.3.2。使用绑定认证 29.3.3。加载权限
29.4。实现类
29.4.1。LdapAuthenticator实现
通用功能 认证者 PasswordComparisonAuthenticator
29.4.2。连接到LDAP服务器 29.4.3。LDAP搜索对象
FilterBasedLdapUserSearch中
29.4.4。LdapAuthoritiesPopulator在 29.4.5。Spring Bean配置 29.4.6。LDAP属性和自定义的UserDetails
29.5。活动目录认证
29.5.1。ActiveDirectoryLdapAuthenticationProvider
活动目录错误代码
30. JSP标签库
30.1。声明Taglib 30.2。授权标签
30.2.1。禁用标签授权测试
30.3。认证标签 30.4。accesscontrollist标签 30.5。csrfInput标签 30.6。csrfMetaTags标签
Java认证和授权服务(JAAS)提供者
31.1。概观 31.2。AbstractJaasAuthenticationProvider
31.2.1。JAAS CallbackHandler 31.2.2。JAAS管理局局长
31.3。DefaultJaasAuthenticationProvider
31.3.1。InMemoryConfiguration 31.3.2。DefaultJaasAuthenticationProvider示例配置
31.4。JaasAuthenticationProvider 31.5。作为主题运行
32. CAS认证
32.1。概观 32.2。CAS如何工作
32.2.1。春季安全与CAS交互序列
32.3。CAS客户端的配置
32.3.1。服务票据认证 32.3.2。单一注销 32.3.3。使用CAS对无状态服务进行身份验证
配置CAS以获取代理授予票证 使用代理票证调用无状态服务
32.3.4。代理券认证
33. X.509认证
33.1。概观 33.2。将X.509身份验证添加到您的Web应用程序 33.3。在Tomcat中设置SSL
34.运行认证替换
34.1。概观 34.2。组态
35. Spring Security加密模块
35.1。介绍 35.2。加密机
35.2.1。BytesEncryptor 35.2.2。TextEncryptor
35.3。主要发电机
35.3.1。BytesKeyGenerator 35.3.2。StringKeyGenerator
35.4。密码编码
36.并发支持
36.1。DelegatingSecurityContextRunnable 36.2。DelegatingSecurityContextExecutor 36.3。Spring安全性并发类
37. Spring MVC集成
37.1。@EnableWebMvcSecurity 37.2。MvcRequestMatcher 37.3。@AuthenticationPrincipal 37.4。Spring MVC异步集成 37.5。Spring MVC和CSRF集成
37.5.1。自动令牌包含 37.5.2。解决CsrfToken
七。Spring数据集成
38. Spring Data&Spring安全配置 39. @Query中的安全表达式
八。附录
40.安全数据库模式
40.1。用户架构
40.1.1。集团当局
40.2。持久登录(记住我)架构 40.3。ACL架构
40.3.1。的HyperSQL 40.3.2。PostgreSQL的 40.3.3。MySQL和MariaDB 40.3.4。Microsoft SQL Server 40.3.5。Oracle数据库
41.安全命名空间
41.1。Web应用程序安全
41.1.1。<调试> 41.1.2。<HTTP>
<http>属性 <http>的子元素
41.1.3。<禁止访问的处理程序>
<access-denied-handler>的父元素 <access-denied-handler>属性
41.1.4。<CORS>
<cors>属性 父元素<cors>
41.1.5。<头>
<headers>属性 <headers>的父元素 <headers>的子元素
41.1.6。<缓存控制>
<cache-control>属性 <cache-control>的父元素
41.1.7。<HSTS>
<hsts>属性 <hsts>的父元素
41.1.8。<hpkp>
<hpkp>属性 <hpkp>的父元素
41.1.9。<销>
<pins>的子元素
41.1.10。<销>
<pin>属性 <pin>的父元素
41.1.11。<内容的安全性的策略>
<content-security-policy>属性 <content-security-policy>的父元素
41.1.12。<引荐政策>
<referrer-policy>属性 <referrer-policy>的父元素
41.1.13。<帧选项>
<frame-options>属性 <frame-options>的父元素
41.1.14。<XSS-保护>
<xss-protection>属性 <xss-protection>的父元素
41.1.15。<内容类型选项>
<content-type-options>属性 <content-type-options>的父元素
41.1.16。<头>
<header-attributes>属性 <header>的父元素
41.1.17。<匿名>
<anonymous>的父元素 <anonymous>属性
41.1.18。<CSRF>
父元素<csrf> <csrf>属性
41.1.19。<定制滤波器>
<custom-filter>的父元素 <custom-filter>属性
41.1.20。<表达式处理程序>
<expression-handler>的父元素 <表达式处理器>属性
41.1.21。<表单登录>
<form-login>的父元素 <form-login>属性
41.1.22。<HTTP的基本>
<http-basic>的父元素 <http-basic>属性
41.1.23。<http-firewall>元素
<http-firewall>属性
41.1.24。<截距-URL>
<intercept-url>的父元素 <intercept-url>属性
41.1.25。<JEE>
<jee>的父元素 <jee>属性
41.1.26。<注销>
父元素<logout> <logout>属性
41.1.27。<OpenID的登录>
<openid-login>的父元素 <openid-login>属性 <openid-login>的子元素
41.1.28。<属性交换>
<attribute-exchange>的父元素 <attribute-exchange>属性 <attribute-exchange>的子元素
41.1.29。<OpenID的属性>
<openid-attribute>的父元素 <openid-attribute>属性
41.1.30。<端口映射>
<port-mappings>的父元素 <port-mappings>的子元素
41.1.31。<端口映射>
<port-mapping>的父元素 <port-mapping>属性
41.1.32。<记得,我>
<remember-me>的父元素 <记住我>属性
41.1.33。<request-cache>元素
<request-cache>的父元素 <request-cache>属性
41.1.34。<会话管理>
<session-management>的父元素 <session-management>属性 <session-management>的子元素
41.1.35。<并发控制>
<concurrency-control>的父元素 <concurrency-control>属性
41.1.36。<X509>
<x509>的父元素 <x509>属性
41.1.37。<滤波器链地图>
<filter-chain-map>属性 <filter-chain-map>的子元素
41.1.38。<滤波器链>
<filter-chain>的父元素 <filter-chain>属性
41.1.39。<滤波器安全元数据源>
<filter-security-metadata-source>属性 <filter-security-metadata-source>的子元素
41.2。WebSocket安全
41.2.1。<WebSocket的消息经纪人>
<websocket-message-broker>属性 <websocket-message-broker>的子元素
41.2.2。<截距消息>
<intercept-message>的父元素 <intercept-message>属性
41.3。认证服务
41.3.1。<认证管理器>
<authentication-manager>属性 <authentication-manager>的子元素
41.3.2。<认证提供商>
<authentication-provider>的父元素 <authentication-provider>属性 <authentication-provider>的子元素
41.3.3。<JDBC用户服务>
<jdbc-user-service>属性
41.3.4。<密码编码器>
<密码编码器>的父元素 <密码编码器>属性 <密码编码器>的子元素
41.3.5。<盐源>
<salt-source>的父元素 <salt-source>属性
41.3.6。<用户服务>
<用户服务>属性 <user-service>的子元素
41.3.7。<用户>
<user>的父元素 <user>属性
41.4。方法安全
41.4.1。<全局方法的安全性>
<global-method-security>属性 <global-method-security>的子元素
41.4.2。<后调用提供商>
<调用后提供程序>的父元素 <调用后提供程序>属性
41.4.3。<预后注释的处理>
<注释前处理>的父元素 <注释后处理前的子元素>
41.4.4。<调用属性工厂>
<invocation-attribute-factory>的父元素 <invocation-attribute-factory>属性
41.4.5。<后调用-建议>
<post-invocation-advice>的父元素 <post-invocation-advice>属性
41.4.6。<预调用-建议>
<pre-invocation-advice>的父元素 <pre-invocation-advice>属性
41.4.7。使用安全方法
父节点<protect-pointcut> <protect-pointcut>属性
41.4.8。<截距的方法>
<intercept-methods>属性 <拦截方法>的子元素
41.4.9。<方法的安全性的元数据源>
<method-security-metadata-source>属性 <method-security-metadata-source>的子元素
41.4.10。<保护>
父元素<protect> <protect>属性
41.5。LDAP命名空间选项
41.5.1。使用。定义LDAP服务器
<ldap-server>属性
41.5.2。<LDAP的认证提供商>
<ldap-authentication-provider>的父元素 <ldap-authentication-provider>属性 <ldap-authentication-provider>的子元素
41.5.3。<密码比较>
<password-compare>的父元素 <password-compare>属性 <password-compare>的子元素
41.5.4。<LDAP的用户服务>
<ldap-user-service>属性
42.春季安全依赖
42.1。弹簧安全核心 42.2。弹簧安全远程访问 42.3。弹簧安全网 42.4。弹簧安全LDAP 42.5。弹簧安全配置 42.6。弹簧安全ACL 42.7。弹簧安全-CAS 42.8。弹簧安全的OpenID 42.9。弹簧安全标记库
43.代理服务器配置 44. Spring Security FAQ
44.1。一般的问题
44.1.1。Spring Security会处理我所有的应用程序安全要求吗? 44.1.2。为什么不使用web.xml安全? 44.1.3。什么Java和Spring框架版本是必需的? 44.1.4。我是Spring Security的新手,我需要构建一个支持通过HTTPS进行CAS单点登录的应用程序,同时允许对某些URL进行本地基本身份验证,并对多个后端用户信息源(LDAP和JDBC)进行身份验证。我已经复制了一些配置文件,但没有成功。什么可能是错的?
44.2。常见问题
44.2.1。当我尝试登录时,出现错误消息“Bad Credentials”。怎么了? 44.2.2。当我尝试登录时,我的应用程序进入“无限循环”,发生了什么事? 44.2.3。我得到一个异常,消息“访问被拒绝(用户是匿名);”。怎么了? 44.2.4。即使在我退出应用程序后,为什么还能看到受保护的页面? 44.2.5。我收到一条异常消息“在SecurityContext中找不到认证对象”。怎么了? 44.2.6。我无法使LDAP认证工作。我的配置有什么问题? 44.2.7。会话管理 44.2.8。我使用Spring Security的并发会话控制来防止用户一次登录多次。登录后打开另一个浏览器窗口时,不会阻止我再次登录。为什么我可以多次登录? 44.2.9。为什么在通过Spring Security进行身份验证时,会话Id会发生变化? 44.2.10。我正在使用Tomcat(或其他servlet容器),并为我的登录页面启用了HTTPS,之后切换回HTTP。它不起作用 - 我只是在认证之后回到登录页面。 44.2.11。我不会在HTTP和HTTPS之间切换,但是我的会话仍然会丢失 44.2.12。我试图使用并发会话控制支持,但它不会让我重新登录,即使我确定我已经注销,并没有超过允许的会话。 44.2.13。Spring Security正在创建一个会话,即使我已经配置了它,通过将create-session属性设置为永远不会。 44.2.14。执行POST时,我得到了一个403 Forbidden 44.2.15。我使用RequestDispatcher将请求转发到另一个URL,但是我的安全约束没有被应用。 44.2.16。我已经将Spring Security的<global-method-security>元素添加到我的应用程序上下文中,但是如果将安全注释添加到我的Spring MVC控制器bean(Struts操作等)中,那么它们似乎没有效果。 44.2.17。我有一个肯定已经过身份验证的用户,但是当我尝试在某些请求期间访问SecurityContextHolder时,身份验证为空。为什么我看不到用户信息? 44.2.18。在使用URL属性时,授权JSP标记不尊重我的方法安全注释。
44.3。Spring安全体系结构问题
44.3.1。我怎么知道X是哪个包? 44.3.2。命名空间元素如何映射到传统的bean配置? 44.3.3。“ROLE_”是什么意思,为什么我需要在我的角色名称? 44.3.4。我如何知道添加到我的应用程序使用Spring Security的依赖关系? 44.3.5。运行嵌入式ApacheDS LDAP服务器需要哪些依赖关系? 44.3.6。什么是UserDetailsS​​ervice,我需要一个?
44.4。常见的“Howto”请求
44.4.1。我需要登录更多的信息,而不仅仅是用户名。如何添加对额外登录字段(例如公司名称)的支持? 44.4.2。如果只有请求的URL的片段值不同(例如/ foo#bar和/ foo#blah?),我该如何应用不同的拦截url链接? 44.4.3。如何在UserDetailsS​​ervice中访问用户的IP地址(或其他Web请求数据)? 44.4.4。我如何从UserDetailsS​​ervice访问HttpSession? 44.4.5。如何访问UserDetailsS​​ervice中的用户密码? 44.4.6。如何动态定义应用程序中的安全URL? 44.4.7。我如何对LDAP进行身份验证,但从数据库加载用户角色? 44.4.8。我想修改由名称空间创建的bean的属性,但是模式中没有任何内容支持它。我可以做什么放弃命名空间的使用?
45.从3.x迁移到4.x

Spring Security是一个强大且高度可定制的身份验证和访问控制框架。这是保护基于Spring的应用程序的事实标准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值