@Controller
public class HelloController {
@Value("${sso.server.url}")
String ssoServerUrl;
/**
* 无需登录就可以访问
* @return
*/
@ResponseBody
@GetMapping("/hello")
public String hello(){
return hello();
}
/**
* 感知这次是在 ssoserver登录成功眺回来
* @param model
* @param session
* @param token 只要去ssoserver登录成功眺回来就会带上
* @return
*/
@GetMapping("/employee")
public String employee(Model model, HttpSession session, @RequestParam(value = "token", required = false) String token){
if(!StringUtils.isEmpty(token)){
// 去ssoserver登录成功眺回来就会带上
// TODO 1、去 ssoserver获取当前token 真正对应的用户信息
session.setAttribute("loginUser", "zhangsan");
}
Object loginUser = session.getAttribute("loginUser");
if(loginUser == null){
// 没登录,跳转到登录服务器进行登录
// 跳转过去以后,使用url上的查询参数,标识我们自己是哪个页面
// redirect_url=http://client1.com:8081/employee
return "redirect:" + ssoServerUrl + "?redirect_url=http://client1.com:8081/employee";
}else {
List<String> emps = new ArrayList<>();
emps.add("张三");
emps.add("李四");
model.addAttribute("emps", emps);
return "list";
}
}
}
server.port=8081
sso.server.url=http://sso.com:8080/login.html
@Controller
public class LoginController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/login.html")
public String loginPage(@RequestParam("redirect_url") String url, Model model){
model.addAttribute("url", url);
return "login";
}
@PostMapping("/doLogin")
public String doLogin(String username, String password, String url){
if(!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)){
// 登录成功,跳回之前页面
//把登录成功的用户存起来
String uuid = UUID.randomUUID().toString().replace("-", "");
redisTemplate.opsForValue().set(uuid, username);
return "redirect:" + url + "?token=" + uuid;
}
// 登录失败,展示登录页
return "login";
}
}
server.port=8080
spring.redis.host=192.168.150.137
spring.redis.port=6379
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>