1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-07-28 12:22:17 +08:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Guide
ebba51334e
Merge pull request #1701 from WT-AHA/main
错别字修改
2022-04-22 16:35:24 +08:00
guide
ac60a4c2bb Update java-basic-questions-02.md 2022-04-22 16:28:25 +08:00
WT-AHA
aef83d2c23
Update basis-of-authority-certification.md 2022-04-22 15:24:49 +08:00
WT-AHA
47a9709504
Update basis-of-authority-certification.md
[修改]: 修复 认证授权基础 超链接访问不了的问题
2022-04-22 15:00:24 +08:00
WT-AHA
62bc919316
Update basis-of-authority-certification.md
[修改]:认证授权基础中 cookie 一般保存的是 sessionId 而不是 session,修改错别字
2022-04-22 14:55:33 +08:00
2 changed files with 21 additions and 6 deletions

View File

@ -490,9 +490,11 @@ String str3 = "world";
String str4 = str1 + str2 + str3;
```
对象引用和“+”的字符串拼接方式,实际上是通过 `StringBuilder` 调用 `append()` 方法实现的,拼接完成之后调用 `toString()` 得到一个 `String` 对象 。
上面的代码对应的字节码如下:
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/touzi/image-20220131173604062.png)
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/image-20220422161637929.png)
可以看出,字符串对象通过“+”的字符串拼接方式,实际上是通过 `StringBuilder` 调用 `append()` 方法实现的,拼接完成之后调用 `toString()` 得到一个 `String` 对象 。
不过,在循环内使用“+”进行字符串的拼接的话,存在比较明显的缺陷:**编译器不会创建单个 `StringBuilder` 以复用,会导致创建过多的 `StringBuilder` 对象**。
@ -507,10 +509,23 @@ System.out.println(s);
`StringBuilder` 对象是在循环内部被创建的,这意味着每循环一次就会创建一个 `StringBuilder` 对象。
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/touzi/image-20220131175013108.png)
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/image-20220422161320823.png)
如果直接使用 `StringBuilder` 对象进行字符串拼接的话,就不会存在这个问题了。
```java
String[] arr = {"he", "llo", "world"};
StringBuilder s = new StringBuilder();
for (String value : arr) {
s.append(value);
}
System.out.println(s);
```
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/image-20220422162327415.png)
如果你使用 IDEA 的话IDEA 自带的代码检查机制也会提示你修改代码。
#### String#equals() 和 Object#equals() 有何区别?
`String` 中的 `equals` 方法是被重写过的,比较的是 String 字符串的值是否相等。 `Object``equals` 方法是比较的对象的内存地址。

View File

@ -68,7 +68,7 @@ RBAC 即基于角色的权限访问控制Role-Based Access Control。这
下面是 `Cookie` 的一些应用案例:
1. 我们在 `Cookie` 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,`Cookie` 还能保存用户首选项,主题和其他设置信息。
2. 使用 `Cookie` 保存 `Session` 或者 `Token` ,向后端发送请求的时候带上 `Cookie`,这样后端就能取到 `Session` 或者 `Token` 了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
2. 使用 `Cookie` 保存 `SessionId` 或者 `Token` ,向后端发送请求的时候带上 `Cookie`,这样后端就能取到 `Session` 或者 `Token` 了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
3. `Cookie` 还可以用来记录和分析用户行为。举个简单的例子你在网上购物的时候,因为 HTTP 协议是没有状态的,如果服务器想要获取你在某个页面的停留状态或者看了哪些商品,一种常用的实现方式就是将这些信息存放在 `Cookie`
4. ......
@ -117,7 +117,7 @@ public String readAllCookies(HttpServletRequest request) {
}
```
更多关于如何在 Spring Boot 中使用 `Cookie` 的内容可以查看这篇文章:[How to use cookies in Spring Boot](https://attacomsian.com/blog/cookies-spring-boot) 。
更多关于如何在 Spring Boot 中使用 `Cookie` 的内容可以查看这篇文章:[How to use cookies in Spring Boot](https://attacomsian.com/blog/cookies-spring-boot) 。
## Cookie 和 Session 有什么区别?
@ -179,7 +179,7 @@ Session-Cookie 方案在单体环境是一个非常好的身份认证方案。
## 为什么 Cookie 无法防止 CSRF 攻击,而 Token 可以?
**CSRFCross Site Request Forgery**一般被翻译为 **跨站请求伪造** 。那么什么是 **跨站请求伪造** 呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:
**CSRF(Cross Site Request Forgery)** 一般被翻译为 **跨站请求伪造** 。那么什么是 **跨站请求伪造** 呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:
小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了 10000 元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小壮的身份给银行发送了一个转账请求,也就是通过你的 Cookie 向银行发出请求。