Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制

                                                作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.基于用户的访问控制概述

认证质询:
  WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码

认证:
  Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

认证方式两种:
  basic:
    明文认证,不过可以配合https进行加密传输问题也不大。
  digest:
    消息摘要认证,兼容性差,有的浏览器可能不支持哟~

安全域:
  需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码
  虚拟账号:
    仅用于访问某服务时用到的认证标识
  存储:
    文本文件,SQL数据库,ldap目录存储,nis等

二.基于basic认证配置实战案例

1>.创建测试数据

[root@node101.yinzhengjie.org.cn ~]# mkdir /var/www/html/admin
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo "/var/www/html/admin/index.html" > /var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /var/www/html/admin
total
-rw-r--r-- root root Dec : index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/index.html
/var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#

2>.提供账号和密码存储(文本文件)

使用专用命令完成此类文件的创建及用户管理
  htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
  常用选项:
    -c:
      自动创建文件,仅应该在文件不存在时使用
    -p:
      明文密码
    -d:
      CRYPT格式加密,默认
    -m:
      md5格式加密
    -s:
      sha格式加密
    -D:
      删除指定用户 具体使用案例如下图所示。
[root@node101.yinzhengjie.org.cn ~]# htpasswd -c /etc/httpd/conf.d/httpdpasswd jason          #创建第一个用户时需要使用"-c"选项创建的用户的同时会自动创建文件,若文件已经存在则清空文件所有内容重新写入咱们新创建的用户。
New password:
Re-type new password:
Adding password for user jason
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw-r--r-- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# date
Mon Dec :: CST
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# htpasswd -s /etc/httpd/conf.d/httpdpasswd jay            #创建第二个用户时千万别在使用"-c"选项哟,不过咱们可以使用-s指定加密算法为sha格式加密哟~
New password:
Re-type new password:
Adding password for user jay
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# chmod /etc/httpd/conf.d/httpdpasswd                 #为了安全起见,可以将文件权限改小点。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
[root@node101.yinzhengjie.org.cn ~]#

htpasswd命令使用案例

3>.修改httpd的配置文件

[root@node101.yinzhengjie.org.cn ~]# ll /var/www/html/admin/
total
-rw-r--r-- root root Dec : index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/index.html
/var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
AuthType Basic                          #指明验证方式
AuthName "Welecon to Login"                  #指定客户端验证时的提示信息
AuthUserFile "/etc/httpd//conf.d/httpdpasswd"       #指定账号验证文件,一定要确认httpd运行用户是否对该文件有执行权限哟~
Require user jason                        #此处我们只写了允许jason用户访问,若果想要jay用户也可以访问则输入"Require user jason jay",如果允许帐号验证文件中所有用户登录访问则这里可以写"Require valid-user"
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -t
Syntax OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#

4>.浏览器访问页面并使用jason用户登录

5>.用户名密码验证成功就可以访问成功啦~(如果不能访问的话,错误原因可以自行查看错误日志信息哟~)

6>.使用jay用户访问并不会成功,因为咱们在httpd的配置文件中配置的是"Require user jason" 表示只允许jason用户访问

7>.在配置文件中定义一个".htaccess"隐藏文件

[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
  AllowOverride AuthConfig      #除了AuthConfig的其它指令都无法覆盖,即允许使用权限验证功能。
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/.htaccess      #将之前的验证信息直接写在这里的隐藏文件即可
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/etc/httpd//conf.d/httpdpasswd"
Require user jason jay        #此处我们允许jason和jay用户访问,若允许账号验证文件的所有用户均有权限访问可直接写"Require valid-user"即可。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#

8>.为什么".htaccess"文件客户端看不到呢?(如下图所示,那是因为以".ht*"开头的文件都被拒绝啦~)

[root@node101.yinzhengjie.org.cn ~]# grep -C  htaccess /etc/httpd/conf/httpd.conf
# for more information.
#
Options Indexes FollowSymLinks #
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None --
<IfModule dir_module>
DirectoryIndex index.html
</IfModule> #
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ".ht*">
Require all denied
</Files>
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# grep -C 5 htaccess /etc/httpd/conf/httpd.conf        #查看匹配到"htaccess"内容的前后5行

三.基于组账号进行认证实战案例

1>.创建用户账号和组账号文件

[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# htpasswd /etc/httpd/conf.d/httpdpasswd jerry
New password:
Re-type new password:
Adding password for user jerry
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
jerry:$apr1$NC0Az6Ga$2ers2ZQZttbW.DPNrie.n0
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# vim /etc/httpd/conf.d/httpdgroup
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdgroup      #每一行定义一个组,组中的用户用空格分开
testgroup: jason jerry
[root@node101.yinzhengjie.org.cn ~]#

2>.定义安全域

[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
AllowOverride AuthConfig
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# vim /var/www/html/admin/.htaccess
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/.htaccess
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/etc/httpd//conf.d/httpdpasswd"
AuthGroupFile "/etc/httpd/conf.d/httpdgroup"
Require group testgroup
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -t
Syntax OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#

3>.使用jerry用户访问

4>.jerry用户访问成功

5>.远程客户端和用户验证的控制

Satisfy ALL|Any
  ALL:
    客户机IP和用户验证都需要通过才可以
  Any:
    客户机IP和用户验证,有一个满足即可 示例:
  Require valid-user        #这种写法是httpd2.2版本的写法,在httpd2.4推荐使用Require all granted
  Order allow,deny
  Allow from 192.168.
  Satisfy Any

四.认证时需要启动认证模块(默认是启动的)

1>.禁用基本认证模块

[root@node101.yinzhengjie.org.cn ~]# grep auth_basic_module /etc/httpd/conf.modules.d/-base.conf       #禁用基本的身份验证模块,只需要在前面添加"#"号注释即可。
#LoadModule auth_basic_module modules/mod_auth_basic.so
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -M | grep basic                              #若没有输出说明动态模块被咱们禁用了
[root@node101.yinzhengjie.org.cn ~]#

2>.禁用认证模块后用户将无法使用认证功能

[root@node101.yinzhengjie.org.cn ~]# tail -10f /var/log/httpd/error_log                       #错误日志出现如下的报错信息哟~
......
[Mon Dec ::58.813900 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding module
[root@node101.yinzhengjie.org.cn ~]#

3>.启用基本认证模块

[root@node101.yinzhengjie.org.cn ~]# grep auth_basic_module /etc/httpd/conf.modules.d/-base.conf       #"auth_basic_module"是基本的身份验证的模块,默认是开启的。
LoadModule auth_basic_module modules/mod_auth_basic.so                                 #加载模块的指令使用的是LoadModule,加载模块的名称为"auth_basic_module",该模块在磁盘上存放的位置是"modules/mod_auth_basic.so"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/modules/mod_auth_basic.so                    #根据上面指定的位置咱们的确可以找到该模块哟~
-rwxr-xr-x root root Aug : /etc/httpd/modules/mod_auth_basic.so
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -M | grep basic                              #该动态模块已经被加载啦
auth_basic_module (shared)
[root@node101.yinzhengjie.org.cn ~]#

五.客户端验证失败原因

1>.查看错误日志

[root@node101.yinzhengjie.org.cn ~]# tail  /var/log/httpd/access_log
172.30.1.254 - - -- :: "-" - "-" "-"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/access_log

[root@node101.yinzhengjie.org.cn ~]# tail  /var/log/httpd/error_log
[Mon Dec ::58.813900 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding mod
ule[Mon Dec ::57.638316 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding mod
ule[Mon Dec ::08.559118 ] [mpm_worker:notice] [pid :tid ] AH00297: SIGUSR1 received. Doing graceful restart
[Mon Dec ::08.567627 ] [lbmethod_heartbeat:notice] [pid :tid ] AH02282: No slotmem from mod_heartmonitor
[Mon Dec ::08.567967 ] [mpm_worker:notice] [pid :tid ] AH00292: Apache/2.4. (CentOS) configured -- resuming normal operations
[Mon Dec ::08.567977 ] [core:notice] [pid :tid ] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Dec ::20.795627 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::22.947555 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::34.561196 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::18.925494 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/error_log

2>.错误原因分析

[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd         #错误原因可能会是客户端输入了错误密码,但是从上面的日志分析可以看出来应该是权限被拒绝,于是查看该文件发现果不其然,的确是没有权限访问的。
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#

3>.解决方案

[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd          
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ps aux | grep httpd                          #需要查明httpd服务是被哪个用户启用的,不难发现是apache用户在运行httpd服务。
root 0.0 0.0 ? Ss : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
root 0.0 0.0 pts/ S+ : : grep --color=auto httpd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:apache:r /etc/httpd/conf.d/httpdpasswd       #于是我们需要为httpd服务添加ACL权限
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw-r-----+ root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /etc/httpd/conf.d/httpdpasswd               #再次确认一下httpd的验证文件是否有权限哟~确认有访问权限后再使用浏览器访问就可以成功啦,如下图所示。
getfacl: Removing leading '/' from absolute path names
# file: etc/httpd/conf.d/httpdpasswd
# owner: root
# group: root
user::rw-
user:apache:r--
group::---
mask::r--
other::--- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制的更多相关文章

  1. Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机

    Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...

  2. Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面

    Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.status功能概述 status页 ...

  3. Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项

    Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...

  4. Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享

    Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现用户家目录的http共享前提 在配置家目录共 ...

  5. Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名

    Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.创建测试数据 [root@node101.yinzhengj ...

  6. Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集

    Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...

  7. Httpd服务入门知识-Httpd服务常见配置案例之日志设定

    Httpd服务入门知识-Httpd服务常见配置案例之日志设定 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志类型 [root@node101.yinzhengjie.org ...

  8. Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制

    Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Options  1>.OPTIONS指 ...

  9. Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置

    Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义站点主页面 [root@node101.yi ...

随机推荐

  1. 2019qbxtCSP-S2 模拟题1

    T1 \(solution\) 求出第一个开始下降的位置,移动到连续的与它相同的数的最前面的一个数的位置,记录为\(p\) \(p\)以前的位置的数与原数相同,\(p\)位置为原数-1,后面全部为9 ...

  2. Solr的核心操作案例

    @Service public class SearchServiceImpl implements SearchService { @Autowired private SolrTemplate s ...

  3. shell中使用expect命令进行远程执行命令脚本

    expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程. 注意: 1.脚本的执行方法与bash shell不一样,比如:expect example.sh 2.向一个脚 ...

  4. 【Gamma阶段】第八次Scrum Meeting

    冰多多团队-Gamma阶段第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 添加pytorch训练dict和ssh工具 ...

  5. nginx缓存静态资源,只需几个配置提升10倍页面加载速度

    nginx缓存静态资源,只需几个配置提升10倍页面加载速度 首先我们看图说话 这是在没有缓存的情况下,这个页面发送了很多静态资源的请求:   1.png 可以看到,静态资源占用了整个页面加载用时的90 ...

  6. 模型区分度衡量指标-KS值

    1.KS值--学习器将正例和反例分开的能力,确定最好的“截断点” KS曲线和ROC曲线都用到了TPR,FPR.KS曲线是把TPR和FPR都作为纵坐标,而样本数作为横坐标.但是AUC只评价了模型的整体训 ...

  7. 关于jsruntime 的概念

    In the JSAPI, JSRuntime is the top-level object that represents an instance of the JavaScript engine ...

  8. 用 LinkedList 实现一个 java.util.Stack 栈

    用 LinkedList 实现一个 java.util.Stack 栈 import java.util.LinkedList; public class Stack<E> { priva ...

  9. 如何解决Requests的SSLError(转)

    add by zhj: 我使用方法2“更新系统的certificate”解决了问题 原文:https://www.jianshu.com/p/8deb13738d2c 这两天在Linux上爬Googl ...

  10. Scala 系列(十一)—— 模式匹配

    一.模式匹配 Scala 支持模式匹配机制,可以代替 swith 语句.执行类型检查.以及支持析构表达式等. 1.1 更好的swith Scala 不支持 swith,可以使用模式匹配 match.. ...