欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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.
不信可以自己查。

相关标签: java java spring