【Java】Springboot+Shiro简单粗暴的单点登录SSO
程序员文章站
2022-06-21 15:07:38
...
这两天有个自开发系统要做单点登录。
本来想简单的一搞,结果网上一搜,全都是一堆Override…你抄我我抄他的程序员乱象什么时候是个头啊!
我就想几行代码一把梭,不想浪费太多时间。
一开始,我想的是使用官方的做法去做,毕竟更规范一些。然后就开始找各种资料,看官方文档等等。但是看了半圈下来,一天快过去了,除了更熟悉shiro之外,没什么头绪。
后来我转念一想,不就是认证嘛,你不就要个账号和密码嘛。账号肯定是前端传过来的嘛,大不了做个加密字符串,我到后台来再**解密一把。至于密码,直接用解密出来的账号去数据库查密码,如果密码是加密存储的,解密一把,或者把前台传过来的密码加密一把。
这样,账号密码都有了,传给 UsernamePasswordToken 就ok啦!
最终,单点代码如下:
@RequestMapping("/sso")
public String SSOLogin(String username,Model model,HttpSession session) {
System.out.println(username);
User usertmp = userService.queryUserByUserName(username);
if(usertmp == null){
model.addAttribute("msg","用户不存在");
return "login";
}
/*
* 重点不就是这句么,找到他的password,你要password,我给你就好了啊~
*/
String password = usertmp.getPassword();
Subject subject = SecurityUtils.getSubject();
// 2 封装用户数据
UsernamePasswordToken token = new UsernamePasswordToken();
token.setUsername(username);
token.setPassword(password.toCharArray());
// 3 执行登陆
try{
subject.login(token);
// 获取user
User user = (User) subject.getPrincipal();
session.setAttribute("user",user);
model.addAttribute("msg","登陆成功");
return "redirect:/index";
}catch (UnknownAccountException ex){
model.addAttribute("msg","用户不存在");
return "login";
}catch (IncorrectCredentialsException incorrectCredentialsException) {
model.addAttribute("msg","密码不正确");
return "login";
}
}
有时候啊,不要把问题想得太复杂。
当然这不是最终的代码,毕竟很少有人把密码明文存储并且…我会给一个标志位来标识自己的程序单点登录~类似于**吧!
对了,**不念mi yao ,念 mi yue.
不信可以自己查。
上一篇: 请谈谈你对OOM的认识
下一篇: mp3格式音频转wav格式音频