文章目录
1、众筹-SpringSecurity断点调试
上周bug: 关闭SpringSecurity的 csrf功能
1.1 使用SpringSecurity时,引入依赖后,需要在项目的web.xml中配置filter启用springsecurity:filter可以将请求过滤进行权限检查
1.2 如果需要查看springsecurity执行流程,可以在配置的filter的拦截方法中打断点
在DelegatingFilterProxy的 doFilter方法254行中打断点调试
1.3 debug研究 提交登录请求时,springsecurity如何创建主体
在浏览器中打开登录页面,从登录页面提交登录请求
1.4 处理登录请求时,会在DelegatingFilterProxy的254行断点处停止
Filter delegateToUse = this.delegate;
获取项目启动时,springsecurity初始化的filter链对象的集合
invokeDelegate(delegateToUse, request, response, filterChain); 让获取的filter链继续执行
1.5 在FilterCHainProxy的177行
doFilterInternal(request, response, chain);
通过springsecurity的filter链处理当前请求
1.6 在FilterChainProxy的214行
vfc.doFilter(fwRequest, fwResponse);
执行springsecurity的filter链
1.7 在FilterChainProxy中320行打断点
currentPosition 代表已经执行过的filter链中的filter的数量
1.8 执行到FilterChainProxy currentPosition取出UsernamePasswordAuthenticationFilter时,开始去查看代码的执行过程
1.9 查看AbstractAuthenticationProcessingFilter中212行
authResult = attemptAuthentication(request, response);
做认证
2.0 在 UsernamePasswordAuthenticationFilter中
75和76行获取了提交登录请求的账号密码
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
username, password);
将获取到的账号密码创建为对象携带
94行进行认证
return this.getAuthenticationManager().authenticate(authRequest);
2.1 在ProviderManager的199行
result = parent.authenticate(authentication);
尝试使用用户自定义的Provider处理请求
执行时,可以获取到通过Security配置类封装的DaoAuthenticationProvider进行认证
174行
result = provider.authenticate(authentication);
使用DaoAuthenticationProvider进行认证(根据在配置类中设置给他的UserDetailsServiceImpl和PasswordEncoder尽心认证)
2.2 在DaoAuthenticationProvider中114行
loadedUser = this.getUserDetailsService().loadUserByUsername(username);
调用我们设置给他的userdetailsserviceimpl对象的loadUserByUsername方法并传入登录提交的账号进行主体的创建,并使用loadedUser接受数据库中查询得到的主体对象(密码是数据库中的加密过的密码)
2.3 在AbstractUserDetaisAuntenticationProvider中165行
preAuthenticationChecks.check(user);
查看账号是否可用
166行
additionalAuthenticationChecks(user,
(UsernamePasswordAuthenticationToken) authentication);
进行密码判断,参数1:usr代表数据库查询到的主体,参数2:authentication代表浏览器登录提交的账号密码对象
2.4 在DaoAuthentionProvider中122行
String presentedPassword = authentication.getCredentials().toString();
获取登录提交的密码
94行
passwordEncoder.isPasswordValid(userDetails.getPassword(),presentedPassword, salt)
使用设置的MD5PasswordEncoder验证密码是否一致
2、Linux-vi/vim编辑器
主机中使用xshell和xftp连接虚拟机时,其实就是主机连接虚拟机
在xshell和xftp中需要输入虚拟机的ip地址进行连接
问题:
1、如果虚拟机和主机不能ping通
主机需要关闭防火墙:
控制面板->windows防火墙->启动或关闭防火墙
关闭或卸载杀毒:
2、虚拟机必须先关闭然后再关电脑
可以备份虚拟机做准备
Linux几个基本的命令:
ip addr(ifconfig): 查看虚拟机的ip地址
ctrl+L :清屏
ls: 查看当前目录下的所有的内容
ll : 查看当前目录下的所有内容以单列形式显示
cd 路径:切换文件夹
以后Linux系统服务器一般不会装桌面,都是通过命令行的方式操作
有大量需求,例如修改配置文件、编写文本、文本追加…
编辑文本
Linux中提供了vi/vim 编辑器,可以在命令行中使用vi或vim的命令编辑文本
vi/vim 新建文本文档.txt :可以对文本进行编辑
输入: [shift] :q 回车 可以退出编辑器
2.1 一般模式
通过 vi/vim 文档名称,默认进入 一般模式
1、dd :删除光标所在行
2、u :撤销上一步操作
3、dNd: 删除光标开始的n行
d+数字+d
4、 yy :复制光标所在行
5、p :粘贴复制的内容到光标的下一行
6、x :删除当前字符
在vi或vim命令下,需要使用上下左右 按键移动光标翻动文档,不能使用鼠标实现
7、:set nu 显示文档的行号
8、 1 shift+g:跳转到最前
9、行数 shift+g :跳转到第n行
10、shfit+g : 跳转到最后
11、shift+6 :跳转到行首
12、shift+4 :跳转到行尾
2.2 编辑模式
是对文档内容做细化的修改
在一般模式下,输入 i 、 a、 o、 r进入编辑模式
i: 在光标前插入内容
a: 在光标后插入内容
o :offline,在光标的下一行输入内容
s :删除光标所在的字符并开始插入
R: 替换模式
在编辑模式下,使用ESC返回到一般模式
2.3 命令模式
批量操作、保存退出、显示行号
必须在一般模式下输入 /或者: 进入命令模式
1、:q 退出
:q! 强制退出不保存修改的内容
2、:w 保存
:w! 强制写
3、:wq! 保存退出强制执行
4、/字符串 在文档中搜索关键字
N :查找上一个匹配的关键字
n :查找下一个匹配的关键字
5、:set nu 显示行号
6、:set nonu 取消显示行号
7、:%s/要替换的字符串/新字符串/g 批量替换指定字符串
:%s/SH/上海/g
三个模式的转换:
1、只有一般模式才可以进入到编辑和命令模式
2、一般模式输入i、a、o、r会进入到编辑模式
3、一般模式输入 : 或者/会进入命令模式
4、编辑模式按下ESC会返回到一般模式
5、命令模式esc回到一般模式、只要不是退出的命令模式的命令执行后也会回到一般模式
3、Linux-帮助手册
Linux的命令非常多,Linux内置了帮助手册,可以查看命令如何使用
如果在xshell中 误操作按下了 ctrl+s 代表锁屏
再按下 ctrl+q 代表退出锁屏
man ls: 查看ls命令的帮助手册
-R 递归列出所有文件
-a 列出所有的文件包括隐藏文件
-l 单列输出
ls -Ral / :以单列的形式列出根目录下的所有的文件
q退出帮助手册( esc或者ctrl+c或者 q )
ls --help: 查看ls的帮助手册
cal : 显示日历
date :显示当前时间日期
指定格式显示日期: 2020-05-25 10:55:00
date +%Y'-'%m'-'%d' '%I':'%M':'%S
4、Linux-文件目录命令
pwd: 显示当前所在的位置
ls :以多列的形式列出目录下的所有的资源
ll :以单列的形式列出目录下的资源 等价于 ls -l
如果Linux系统安装时选择了最小化安装,没有此命令
ls -al :以单列列出所有的文件包含隐藏文件
grep: 结合管道符 筛选查询的结果
ll |grep .txt
列出当前路径下的包含.txt字符串的文件显示
ls -lR / |grep .txt
列出系统中所有的包含txt的文件
cd :切换目录:
~ 代表当前用户的家目录
相对路径:
…/代表上一级目录
./代表当前目录下,默认可以省略
如果快速跳转到当前用户的家目录:
如果是root用户就是 /root目录
cd
cd ~
绝对路径:
以/开始的路径
cd /root/桌面
====================
mkdir 文件夹名 :创建单个文件夹
mkdir /opt/a
mkdir -p a/b/c/d 一次性创建多个目录
rmdir 文件夹名: 删除文件夹 一般不用
rm 文件名:删除文件
-r 提示递归进入子目录进行删除操作
-f 强制执行不用提示
-v 显示执行的信息
rm -rvf 文件名 :递归执行强制删除操作并打印执行的信息
rm -rvf / : 递归删除Linux系统根目录下的所有的资源(千万不要用)
========================
touch 文件名: 创建新文件
rm -vf 文件名: 删除文件
============================
查看文件内容:
vim 文件名
cat 文件名 :查看轻量级的文本内容
cat 文件1 文件2: 查看文件1和文件2的文本内容
cat 文件1 文件2>文件3: 将文件1和文件2 的内容合并到文件3中
cat 文件1>>文件2 :将文件1 的内容追加到文件2的末尾
more 文件名:查看大文本文件(类似分页) 一般不用
回车代表向下加载一行
空格键代表加载下一页
ctrl+c退出查看模式
less 文件名: 作用和more一样
支持搜索关键字: /关键字
n 匹配下一个
N 匹配上一个
q 退出查看模式
tail -n行数 文件名: 从文档的最后开始查看n行
tail -n10 文件名
tail -f -n行数 文件名 : 从文档的最后查看n行并跟随查看
查看文档的进程不要关闭,当文档有新的内容时立即刷新现实
在一个xshell的连接中。使用tail -f -n10 a.txt跟随查看
再新建一个xshell的连接,使用cat 1.txt>>a.txt向a.txt中追加文本
ctrl+c关闭跟随查看的模式
========================================
cp 源文件 复制后的文件名 : 移动复制文件
cp -r 源目录 拷贝后的目录: 递归将原目录中的内容拷贝到指定的目录下
如果拷贝后的目录中有文件和原目录名称一样,内容不一样。拷贝时需要确认覆盖
mv 源文件 移动后的文件名: 文件移动到指定位置
mv 需要修改名称的文件 改后的文件名: 文件改名
mv a.txt 笑傲江湖.txt
echo :打印字符串或变量的值
[root@atguigu a]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
5、Linux-搜索查找命令
find:
find / -name ‘*.txt’ 从根目录开始查找所有的以.txt结尾的文件
locate:
locate /root/*.txt 在root目录下查找所有的以.txt结尾的文件
今天创建的txt文件没有查询到,原因linux系统每天0点更新一次文件索引存到指定表中,locate相当于在表中根据查找路径匹配表中的文件索引的路径
updatedb :更新linux的文件索引
更新后再查询
ln: 软连接
ln -s 文件 链接名:给文件创建软连接
6、Linux-压缩解压缩命令
tar:
压缩文件: tar -zcvf mypackage.tar.gz *.txt
解压缩文件:tar -zxvf /root/桌面/mypackage.tar.gz
zip:
压缩文件: zip 压缩包名 要压缩的文件列表
zip my.zip 1.txt 2.txt
解压缩: unzip 压缩包名
unzip my.zip
7、Linux-磁盘操作(了解)
mbr:最多有4个主分区,最大支持2T的硬盘
扩展分区无限,但是需要占用主分区实现
gpt: 底层也采用mbr的方式实现,主分区和扩展分区的数量无限
支持硬盘大小不受限制
磁盘分区的查看:
lsblk: 主要查看磁盘分区的大小
lsblk -f: 查看磁盘的挂载 文件系统类型 唯一标记
给虚拟机服务器添加一块硬盘:
1、给虚拟机先添加一块硬盘
重启虚拟机
通过 lsblk 查看新增的硬盘
2、如果需要使用新增硬盘,需要格式化硬盘[分区、设置fstype和唯一标记uuid/label]
Linux中任何东西都是文件,sdb硬盘也是一个文件,硬件设备对应的文件存在 /dev目录下
分区,其实就是对/dev/sdb进行分区操作
2.1 分区:
fdisk /dev/sdb
m 获取帮助
n 给硬盘创建一个新的分区
一路回车
w 保存分区数据
lsblk -f :可以查看到sdb的分区 sdb1
2.2 永久:设置文件系统格式+设置别名
注意: 格式化分区
mkfs -t ext4 /dev/sdb1
硬盘的分区情况存在 /etc/fstab ,只要参考sda的分区的数据可以手动编写配置实现永久挂载硬盘
vim /etc/fstab :手动新增sbd1分区的配置
创建挂载点的文件夹: mkdir /newdisk
2.4 让Linux系统重新加载/etc/fstab文件获取硬盘分区信息
mount -a
查看指定路径下的磁盘使用情况:
du -ach --max-depth=1 /root
8、Linux-网络进程命令(重点)
8.1 ifconfig
查看网卡信息,默认网卡名称ens33
8.2 图形界面修改ip
8.3 配置文件设置固定ip(重要)
动态分配ip的网络配置文件:
手动修改配置文件:
DEVICE=ens33 # 网卡名
ONBOOT=yes # 开机加载网络配置启动网络服务
BOOTPROTO=none # 分配ip的协议 none static :不自动分配,手动设置ip / dhcp:动态分配ip
IPADDR=192.168.1.130 # 手动指定的ip
GATEWAY=192.168.1.2 # 网关
DNS1=8.8.8.8 # 连接外网时解析域名使用, 如果不配置不能连接外网
修改了配置,需要重启网络服务:service network restart
8.4 进程查看
ps -aux :以systemv的风格 查看进程
主要查询 进程的PID以及CPU和内存的占用情况
ps -ef :
主要查询进程的PID和该进程的父进程的PPID
查询进程的目的一般都是为了杀死该进程
为了查询到想要找的进程 ps 可以结合 grep管道符 筛选查询结果
ps -aux|grep gedit
8.5 杀死进程
kill 进程id :通知进程自己关闭
kill -9 进程id: 系统强制杀死指定的进程
killall 进程名称:通过进程名称杀死该名称所有的进程
关于ll命令无法使用的解决方案
问题:
原因:
"ll"命令不是linux的基本命令,它是"ls -l"的别名,部分版本并不直接支持“ll”命令输出。
解决方法:
运行“vi ~/.bashrc”,查看该文件里是否有“alias ll=‘ls -l’”这样的数据,如有,将数据前的“#”去掉,如果没有,将“alias ll=‘ls -l’”加进去并保存,然后运行“source ~/.bashrc”命令,即可成功。如下图:
开放指定端口号
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
--zone #作用域
--add-port=1935/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
Linux 为shell脚本增加执行权限
- chmod是 Linux 中权限管理命令change the permissions mode of a file的缩写。
- 为所有 .sh 脚本添加执行权限
- chmod u+x *.sh,表示对当前目录下的
.sh
文件的所有者增加可执行权限。 - u 代表所有者;
- x 代表执行权限;
- 表示增加权限。
- chmod u+x *.sh,表示对当前目录下的
- 也可以指定单个文件
chmod u+x abc.sh
。
windows下编写的脚本文件格式转linux下编写的脚本文件格式
- 在linux系统下,用vi/vim打开脚本文件。在命令模式下输入:
set ff=unix
,保存就行。 - 在windows下使用文本编辑器打开脚本文件,将其DOS格式改成UNIX格式。
- 在Linux下新建一个
.sh
脚本文件,复制粘贴内容。
查看端口占用的进程
netstat -ntlp //查看当前所有的tcp端口
- 结合grep可以进一步查看具体端口号的占用情况
netstat -tunlp|grep 端口号,查看端口占用情况
-t , 显示tcp的相关选项
-u, 显示udp的相关选项
-n, 拒绝显示别名,能显示数字的全部转化为数字
-l, 仅列出在Listen(监听)的服务状态
-p, 显示建立相关链接的程序名
根据程序名称查询进程ID
ps -ef|grep 进程名
ps -ef 是显示所有进程
UID:进程拥有者
PID:进程ID
PPID:上级父程序的ID
C: CPU 使用的资源百分比
STIME: 系统启动时间
TTY:登入者的终端机位置
TIME:使用掉的 CPU 时间
CMD:所下达的指令名称
例如查询nginx相关进程状态
[root@ops01 ~]# ps -ef|grep nginx