sso改造soc项目的几种实现

本文介绍了SSO(Single Sign-On)改造的三种实现方式:基于Cookie的统一调用用户身份校验系统,CAS(Central Authentication Service)以及Spring Session+Redis。详细阐述了每种方式的登录、登出逻辑,并分析了各自的优缺点,如CAS的配置复杂性以及Spring Session对代码改动的影响。
摘要由CSDN通过智能技术生成

一、基于cookie,各个子系统统一调用用户身份校验系统

sso-master 为统一校验中心,

SsoCheck 提供对登录的校验和客户端cookie的验证
/**
 * 统一处理login请求
 *
 * @param loginname 用户名
 * @param password 密码
 */
@PostMapping("/auth")
public Result<Map<String, Object>> checkLogin(String loginname, String password) {
    System.out.println("统一登录校验");
    ComplatlUser user = userService.login(loginname, password);
    if (user != null) {
        //封装参数
        Map<String, Object> param = new HashMap<>();
        List<TbDomain> domains = new ArrayList<>();
        domains = domainService.selectAll();
        List<String> domainUrl = new ArrayList<>(domains.size());
        domains.forEach(domain -> {
            domainUrl.add(domain.getDomain() + "/addcookie");
        });
        //生成jwt
        String cookieName = "jian";
        String cookieValue = new JwtUtil(loginname, null).creatJwt();
        param.put("cookieurl", domainUrl);
        param.put("cookieName", cookieName);
        param.put("cookieValue", cookieValue);
        Result<Map<String, Object>> result = new Result<>(ResultCodeEnum.AUTHSUCCESS);
        result.setData(param);
        return result;
    }
    return new Result<>(ResultCodeEnum.UNAUTHORIZEd, "账号或密码错误");
}

/**
 * 添加需要清除的cookie
 */
@GetMapping("/loginout")
public String loginOut(HttpServletRequest request) {
    String callbackFuncation = request.getParameter("callback");
    System.out.println("start clear");
    List<TbDomain> domains = domainService.selectAll();
    List<String> domainUrl = new ArrayList<>(domains.size());
    domains.forEach(domain -> {
        domainUrl.add(domain.getDomain() + "/clear");
    });
    String resultMsg = JSON.toJSONString(domainUrl);
    return  callbackFuncation + "(" + resultMsg + ")";
}

/**
 * 验证cookie是否通过
 *
 * @param cookieName  cookie名称
 * @param cookieValue cookie内容
 * @return 是否认证成功
 */
@GetMapping("/authcookies")
public String checkAuthCookies(String cookieName, String cookieValue) {
    boolean isUpdate = new JwtUtil(null, cookieValue).freeJwt();
    String loginname = new JwtUtil(null, cookieValue).freeJwtLoginName();
    if ("jian".equals(cookieName)) {
        if (isUpdate) {
            System.out.println("cookie验证通过");
            return loginname;
        }
    }
    return "";
}

soc改造:

登录页面:

<form autocomplete="off" action="${ctx}/ssologin" method="post">
    <div class="cont">
        <div class="item abs_usr">
            <i></i>
            <div>
                <input type="textbox" id="loginname" name="loginname" placeholder="用户名" value="${loginname}" disableautocomplete>
            </div>
        </div>
        <div class="item abs_pwd">
            <i></i>
            <div>
                <input type="password" id="password" name="password" placeholder="密码" value="${password}" disableautocomplete>
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值