0%

单点登录-八-模块System-b

系统A已经完成了,系统B其实没什么差别,主要的逻辑都已经在Sso-server模块中完成,如果还有所不懂请参看文档:

单点登录-六-模块Sso-server

单点登录-七-模块System-a

1.确实相差不多,给一下源码即可,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="//layui.hcwl520.com.cn/layui/css/layui.css?v=201811010202" rel="stylesheet">

</head>
<body>
<h1></h1>

<div style="padding: 20px; background-color: #F2F2F2;">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">系统B</div>
<div class="layui-card-body">
用户:<span th:text="${userInfo.userName}"></span>登录成功<br>
ticket:<span th:text="${userInfo.ticket}"></span>
</div>
</div>
<form class="layui-form" method="post" action="/logout">
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" >退出登录</button>
</div>
</div>
</form>
</div>
</div>
</div>

<script src="//layui.hcwl520.com.cn/layui/layui.js?v=201811010202"></script>
</body>
</html>

2.控制器,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* @Description:
* @Author: zllwsy
* @Date: 2020/11/9 11:38
*/
@Controller
public class HomeController {
@Autowired
private RestTemplate restTemplate;

@RequestMapping("/home")
public String goHome(HttpSession session, Model model, HttpServletRequest request){
Object userInfo = session.getAttribute("userInfo");
System.out.println(userInfo);
model.addAttribute("userInfo",session.getAttribute("userInfo"));
return "home";
}

@ResponseBody
@RequestMapping("/logout")
@SuppressWarnings("all")
public String logout(HttpServletRequest request, HttpServletResponse response) {
//获取ticket
String ticket = SsoCookieUtil.getCookie(request,"ticket");
//请求sso-server退出登录
boolean isLogout = restTemplate.getForObject(ServerConstant.SSO_URL+"logout?ticket="+ticket,Boolean.class);
if(isLogout){
//清除cookie
SsoCookieUtil.setCookie(response,"ticket","",0);
return "用户已登出";
}
return "登出失败";
}
}

3.restTemplate配置类,我也想A的配置类,但是着实实现不了,只能再写一次了,其实A和B系统都只用退出登录需要用到,需要嫌麻烦,可以不写退出,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* @Description:
* @Author: zllwsy
* @Date: 2020/11/9 11:38
*/
@Controller
public class HomeController {
@Autowired
private RestTemplate restTemplate;

@RequestMapping("/home")
public String goHome(HttpSession session, Model model, HttpServletRequest request){
Object userInfo = session.getAttribute("userInfo");
System.out.println(userInfo);
model.addAttribute("userInfo",session.getAttribute("userInfo"));
return "home";
}

@ResponseBody
@RequestMapping("/logout")
@SuppressWarnings("all")
public String logout(HttpServletRequest request, HttpServletResponse response) {
//获取ticket
String ticket = SsoCookieUtil.getCookie(request,"ticket");
//请求sso-server退出登录
boolean isLogout = restTemplate.getForObject(ServerConstant.SSO_URL+"logout?ticket="+ticket,Boolean.class);
if(isLogout){
//清除cookie
SsoCookieUtil.setCookie(response,"ticket","",0);
return "用户已登出";
}
return "登出失败";
}
}

4.拦截器配置,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @Description:拦截器配置
* @Author: zllwsy
* @Date: 2020/11/6 14:23
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
//所要拦截的请求路径
String[] addPathPatterns = {
"/**"
};

//不需要拦截的请求路径
String[] excludePathPatterns = {
"/user/error","/user/out"
};

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
}
}

总结:

基本已经完成了逻辑代码的编写,下面就是开始测试,还有就是有关于cookie安全问题的思考,写的很乱,还请见谅。

----------本文结束感谢您的阅读----------