基于cookie的集群

核心思想是基于前台cookie,基于JWT生成用户信息放在cookie里,后台解析cookie获取用户信息

  1. 引入kisso

kisso封装了JWT
https://gitee.com/baomidou/kisso-spring-boot/tree/master

配置kisso,跨域的话可以设置header,然后在filter解析header

#【KissoProperties】
# 对称签名密钥
kisso.config.signkey=C691d971EJ3H376G81
# COOKIE 名称
kisso.config.cookieName=PandaBoot
kisso.config.cookieMaxage=7200
#header
kisso.config.accessTokenName=PandaBoot

登录,username作为标识,可以对username加密

SSOHelper.clearLogin(request, response);
// 设置登录 COOKIE
SSOToken ssoToken = new SSOToken();
ssoToken.setId(sysUser.getUsername());
ssoToken.setIp(request);
ssoToken.setOrigin(TokenOrigin.values()[loginReq.getLoginType()]);
SSOHelper.setCookie(request, response, ssoToken, false);
  1. filter编写,使用shiro作为授权,kisso作为登录和验证,这里只说明验证
String path = httpServletRequest.getServletPath();
//不需要拦截的url
List<String> annonFilter = pandaCoreProperties.getShiroAnonFilter();
boolean isflag = WebUtil.isAnnoRequest(path, annonFilter);
if(isflag){
    return true;
}
SSOToken ssoToken = SSOHelper.getSSOToken(httpServletRequest);
if(null != ssoToken){
    KissoToken token = new KissoToken(ssoToken.getId());
    // 提交给realm进行登入,如果错误他会抛出异常并被捕获
    getSubject(request, response).login(token);
    // 如果没有抛出异常则代表登入成功,返回true
    return true;
}else{
    return false;
}

KissoToken实现AuthenticationToken接口

WebUtil.isAnnoRequest 的方法如下

/**
 * 不需要拦截的url
 * @param url
 * @param whiteUrls
 * @return
 */
public static boolean isAnnoRequest(String url, List<String> whiteUrls) {
    if (url == null || "".equals(url)) {
        return true;
    } else {
        for (String urlTemp : whiteUrls) {
            if (pathMatcher.match(urlTemp, url)) {
                return true;
            }
        }
    }
    return false;
}

3、部署

nginx配置

配置上游服务器

upstream localhost {
       ip_hash;
      server localhost:8085 weight=5;
      server localhost:8086 weight=5;
  }

分配三个端口为8085、8086,最少两个

服务器目录

在这里插入图片描述

分别启动两个服务(本项目作为jar包启动),写了一个批处理 *.sh,如下

#!/bin/bash
slash=/
base_home=/data/study/pandaboot_8085
log_path=/data/study/pandaboot_8085/logs/pandaboot.log
application_name=boot_web-1.0-SNAPSHOT.jar
application_config=application.properties
xms=512m
xmx=512m
maxPermSize=512m

case "$1" in
start)
    echo "start $base_home"
    nohup java -jar  -Xms$xms -Xmx$xmx -XX:MaxPermSize=$maxPermSize $base_home$slash$application_name --spring.config.location=$base_home$slash$application_config &
    tail -f nohup.out
    ;;
stop)   
    echo "stop $base_home"
    pidlist=`ps -ef |grep $base_home$slash  |grep -v "grep"|awk '{print $2}'`
    kill -9 $pidlist
    ;;
restart)
    echo "stop $base_home"
    pidlist=`ps -ef |grep $base_home$slash  |grep -v "grep"|awk '{print $2}'`
    kill -9 $pidlist
    sleep 5
    echo "start $base_home"
    nohup java -jar -Xms$xms -Xmx$xmx -XX:MaxPermSize=$maxPermSize $base_home$slash$application_name --spring.config.location=$base_home$slash$application_config &
    tail -f nohup.out
    ;;
logs)
    tail -f $log_path
    ;;
esac
访问

浏览器访问http://Ip, 集群成功,关掉一个服务可以正常访问,切换到另外一个服务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值