核心思想是基于前台cookie,基于JWT生成用户信息放在cookie里,后台解析cookie获取用户信息
- 引入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);
- 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, 集群成功,关掉一个服务可以正常访问,切换到另外一个服务