后台系统免密跳转至Nacos控制台页面
1 项目场景及现状
1、项目本身有后台管理页面
2、项目集成了nacos作为服务发现与配置中心
3、因后台管理和nacos是独立的服务和用户体系,需分别访问对应的服务地址并输入用户名密码才可进入相应的系统页面。
2 需求问题
直接从后台管理页面跳转至nacos控制台页面,所有后台管理用户可免密进入nacos控制台。
3 解决过程
发现:
1、nacos登录后会在local storage存放登录的token信息
2、local storage中的token信息是nacos登录API成功后会返回
思考:
只要在跳转到nacos控制台之前把用户登录后的token信息存放在local storage中,就可完成前台的免密登录了。
5 逻辑调用过程
注意:后台管理系统和nacos需要在同一个域下才可
4 nacos登录api地址及调用示例
4.1 nacos登录api地址
http://ip:port/nacos/v1/auth/users/login
postman调用示例:
4.2 代码调用示例
import com.springbootplus.common.api.ApiResult;
import com.springbootplus.nacos.domain.repository.NacosRepository;
import com.springbootplus.util.OkHttpRequestUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;
/**
* <pre>
* nacos服务 仓储层
* </pre>
*
* @author yjj
* @since 2021/11/24
*/
@Slf4j
@Repository
public class NacosRepositoryImpl implements NacosRepository {
@Value("${nacos.login.url:http://127.0.0.1:8848/nacos/v1/auth/users/login}")
private String loginUrl;
@Value("${nacos.login.user-name:nacos}")
private String nacosLoginName;
@Value("${nacos.login.user-pass:nacos}")
private String nacosLoginPasswd;
@Override
public String login() {
Map<String, Object> headMap = new HashMap<>(1);
// 注意这里是form-data类型
headMap.put("Content-Type", "multipart/form-data");
Map<String, Object> paramMap = new HashMap<>(2);
paramMap.put("username", nacosLoginName);
paramMap.put("password", nacosLoginPasswd);
try {
return OkHttpRequestUtils.doPost(loginUrl, headMap, paramMap);
} catch (Exception e) {
log.error("调用nacos登录失败", e);
return "跳转nacos控制台失败,请稍候重试";
}
}
}