Skip to content

Commit 22e253c

Browse files
committed
实现持久化登录
1 parent 6079761 commit 22e253c

File tree

6 files changed

+67
-18
lines changed

6 files changed

+67
-18
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,22 @@
2020
> git commit -m "备注" # 提交到本地仓库
2121
> git push origin master # 推送到名为origin的远程仓库的master分支
2222
> git pull origin master # 拉取名为origin的远程仓库的master分支
23+
> git commit --amend --no-edit # 提交 > 追加文件到上次本地提交 不需要改备注
24+
> git push -f origin master # 本地强制提交
2325
> ```
2426
2527
## 进度
2628
> 1. `GitHub`登录之调用 `authorize`
2729
> 2. `GitHub`登录之获取 用户信息`code``token``UserName`
2830
> 3. 配置文件`application.properties`新增配置参数 GitHub.client 信息
2931
> 4. 使用 `MyBaits` 链接数据库并插入数据
32+
> 5. 实现持久化登录 服务器下发 user_token 并在数据库查询
3033
>
3134
3235
## 数据库脚本
3336
3437
```sql
38+
table For H2
3539
-- ----------------------------
3640
-- Table structure for User
3741
-- ----------------------------
@@ -47,3 +51,4 @@ CREATE TABLE "PUBLIC"."USER"(
4751
4852
```
4953
54+

src/main/java/life/majiang/community/controller/AuthorizeController.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package life.majiang.community.controller;
22

3-
/*
3+
/**
44
* 获取code
55
*/
66

@@ -15,7 +15,8 @@
1515
import org.springframework.web.bind.annotation.GetMapping;
1616
import org.springframework.web.bind.annotation.RequestParam;
1717

18-
import javax.servlet.http.HttpServletRequest;
18+
import javax.servlet.http.Cookie;
19+
import javax.servlet.http.HttpServletResponse;
1920
import java.util.UUID;
2021

2122
@Controller // 把类作为路由Api的承载者
@@ -33,38 +34,45 @@ public class AuthorizeController {
3334
@Value("${github.client.uri}")
3435
private String clientUri;
3536

36-
@Autowired // 把 mapper 对象放入容器内
37+
@Autowired // 把 Usermapper 对象放入容器内
3738
private UserMapper userMapper;
3839

3940
@GetMapping("/callback") // 登录成功后返回到登录页
4041
// 接收返回后的参数 code, state
4142
public String callback(@RequestParam(name = "code") String code,
4243
@RequestParam(name = "state") String state,
43-
HttpServletRequest request) {
44+
// HttpServletRequest request,//不需要,可删除
45+
HttpServletResponse response) {
4446
AccessTokenDTO accessTokenDTO = new AccessTokenDTO();
4547
accessTokenDTO.setClient_id(clientID);
4648
accessTokenDTO.setClient_secret(clientSecret);
4749
accessTokenDTO.setCode(code);
4850
accessTokenDTO.setRedirect_uri(clientUri);
4951
accessTokenDTO.setState(state);
5052
String accessToken = githubProvider.getAccess_token(accessTokenDTO);
51-
GithubUser githubUser = githubProvider.getUser(accessToken);
53+
GithubUser githubUser = githubProvider.getUser(accessToken); // 使用 GitHub 登录
5254
// System.out.println("用户昵称 >>> " + user.getName()); // 输出 User昵称
5355

54-
// 登录跳转
56+
/** 登录跳转 */
5557
if (githubUser != null) {
58+
/** 使用 GitHub 登录成功 */
5659
User user = new User();
57-
user.setToken(UUID.randomUUID().toString()); // 生成唯一的标识码
60+
// 获取用户信息生成>>>用户 token
61+
String token = UUID.randomUUID().toString();
62+
/** token 放入 User 对象中并存储到数据库 */
63+
user.setToken(token); // 生成唯一的标识码
5864
user.setName(githubUser.getName());
5965
user.setAccountID(String.valueOf(githubUser.getId()));
6066
user.setGmtCreate(System.currentTimeMillis());
6167
user.setGmtModified(user.getGmtCreate());
6268
System.out.println("--->>> usermapper >>>--- " + userMapper);
6369
System.out.println("--->>> insertuser >>>--- " + user);
6470
userMapper.insert(user);
65-
66-
// 登录成功 >>> 写 cookies 和 session
67-
request.getSession().setAttribute("user", githubUser); // session存入 user对象
71+
/** Cookie 写入 */
72+
// 自动写入 服务器生成 Token 放入 Cookie
73+
response.addCookie(new Cookie("token", token));
74+
// 手动写入 登录成功 >>> 写 cookies 和 session
75+
// request.getSession().setAttribute("user", githubUser); // session存入 user对象
6876
return "redirect:/";
6977
} else {
7078
// 登录失败 >>> 重新登录 原因
@@ -73,6 +81,3 @@ public String callback(@RequestParam(name = "code") String code,
7381
}
7482
}
7583

76-
77-
78-

src/main/java/life/majiang/community/controller/IndexController.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,42 @@
44
* 定义自己的 index
55
*/
66

7+
import life.majiang.community.mapper.UserMapper;
8+
import life.majiang.community.model.User;
9+
import org.springframework.beans.factory.annotation.Autowired;
710
import org.springframework.stereotype.Controller;
811
import org.springframework.web.bind.annotation.GetMapping;
912

13+
import javax.servlet.http.Cookie;
14+
import javax.servlet.http.HttpServletRequest;
15+
1016
@Controller
1117
public class IndexController {
18+
19+
@Autowired // 注入 UserMapper
20+
private UserMapper userMapper;
21+
22+
/**
23+
* 访问首页的时候 循环看所有的Cookie
24+
* 找到 Cookie 为 token 的值
25+
* 用这个值去数据库中查找是否存在
26+
* 如果有 把 user放入 session
27+
* 前端通过页面数据判断是否登录
28+
*/
1229
@GetMapping("/")
13-
public String index(){
30+
public String index(HttpServletRequest request) {
31+
Cookie[] cookies = request.getCookies(); // 获取用户 cookie
32+
for (Cookie cookie : cookies) {
33+
if (cookie.getName().equals("token")) { // 检查 cookies_key是否为 token
34+
String token = cookie.getValue();
35+
User user = userMapper.findByToken(token);
36+
// 如果user != null 写入session
37+
if (user != null) {
38+
request.getSession().setAttribute("user", user);
39+
}
40+
break; // 命中后结束循环
41+
}
42+
}
1443
return "index";
1544
}
1645
}

src/main/java/life/majiang/community/mapper/UserMapper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@
33
import life.majiang.community.model.User;
44
import org.apache.ibatis.annotations.Insert;
55
import org.apache.ibatis.annotations.Mapper;
6+
import org.apache.ibatis.annotations.Param;
7+
import org.apache.ibatis.annotations.Select;
68

79
/*
810
* 引入数据库
11+
* 类会自动放入 不是的需要引入 @Param 注解
912
*/
1013
@Mapper
1114
public interface UserMapper {
1215
@Insert("insert into user (name, account_ID, token, gmt_Create, gmt_Modified) values (#{name}, #{accountID}, #{token}, #{gmtCreate}, #{gmtModified})")
1316
void insert(User user);
17+
18+
@Select("select * from USER where token = #{token}")
19+
User findByToken(@Param("token") String token);
1420
}

src/main/java/life/majiang/community/model/User.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package life.majiang.community.model;
22

3-
// 数据库表格式
4-
/*create table USER
3+
4+
/**
5+
* 数据库User表脚本
6+
create table USER
57
(
68
ID INT auto_increment,
79
ACCOUNT_ID VARCHAR,
@@ -11,7 +13,9 @@ TOKEN CHAR(36),
1113
GMT_MODIFIED BIGINT,
1214
constraint TABLE_NAME_PK
1315
primary key (ID)
14-
);*/
16+
);
17+
*/
18+
1519
public class User {
1620
private Integer id; // 用户自增id
1721
private String name; // username

src/main/resources/application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 更改server端口
1+
# server_web¶Ë¿Ú
22
server.port=8080
33
# GitHubÅäÖÃ
44
github.client.id=639f4c8d6441c6136b44

0 commit comments

Comments
 (0)