SmartBi集成到第三方系统

最近项目有所涉及到SmartBi集成的相关事项,使用了Nginx代理配置优化,特此记录下。

复制代码
import lombok.extern.slf4j.Slf4j;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/***
 *@title SmartBiController
 *@description SmartBi集成到第三方系统
 *@author 
 *@version 1.0.0
 *@create 
 **/
@Slf4j
@Controller
@RequestMapping("/smartbi")
public class SmartBiController {

    @Value("${smartbi.loginUrl}")
    private String smartBiLoginUrl;
    @Value("${smartbi.url}")
    private String smartBiUrl;
    @Value("${smartbi.resiQy}")
    private String smartBiRidQy;
    @Value("${smartbi.resiGs}")
    private String smartBiRidGs;
    @Value("${smartbi.user}")
    private String smartBiUser;
    @Value("${smartbi.password}")
    private String smartBiPassword;

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public void login(HttpServletResponse response) throws Exception {
        BasicCookieStore cookieStore = new BasicCookieStore();
        CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();

        HttpPost loginRequest = new HttpPost(smartBiLoginUrl);
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("username", smartBiUser));
        params.add(new BasicNameValuePair("password", smartBiPassword));

        loginRequest.setEntity(new UrlEncodedFormEntity(params));
        try (CloseableHttpResponse httpResponse = httpClient.execute(loginRequest)){
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != 200) {
                log.error("登录失败:{}", statusCode);
                throw new IllegalArgumentException("登录失败:" + httpResponse.getStatusLine().getReasonPhrase());
            }
            // 获取Cookie
            List<Cookie> cookies = cookieStore.getCookies();
            for (Cookie cookie : cookies) {
                javax.servlet.http.Cookie respCookie = new javax.servlet.http.Cookie(cookie.getName(), cookie.getValue());
                respCookie.setPath("/");
                response.addCookie(respCookie);
            }
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Pragma", "no-cache");
            response.setDateHeader("Expires", 0);
        }
    }

    @RequestMapping(value = "/getSmartBiUrl", method = RequestMethod.GET)
    public String getSmartBiUrl(@RequestParam(name = "type") String type) throws Exception {
        String resultUrl = "";
        if ("1".equals(type)) {
            resultUrl = smartBiUrl + "?resid=" + smartBiRidQy;
        } else {
            resultUrl = smartBiUrl + "?resid=" + smartBiRidGs;
        }
        log.info("登录SmartBi地址:{}", resultUrl);
        return resultUrl;
    }
}
相关推荐
后端LV几秒前
Caffeine 快到 1450 万 ops/s,为什么我还是不敢说数据一致
java·后端
蜗牛互联网6 分钟前
Java 17调用Embeddings API:余弦相似度与FAQ拒答阈值
java·开发语言·人工智能
Q264336502344 分钟前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计
guo_wen_qiang1 小时前
项目使用sentinel遇到的问题
java·sentinel
CarIise1 小时前
IDEA与Maven基础课堂笔记
java·intellij-idea·caffe
小溪学编程1 小时前
C语言篇:枚举类型
java·c语言·前端
云和数据.ChenGuang1 小时前
JAVAEE AI工程师路线图
java·人工智能·java-ee·fastapi·springai·langchain4j
2601_962885721 小时前
如何用 Python 统计 A 股连续涨停(几连板)?
java·linux·python
大圣编蚕1 小时前
Spring AOP 失效排查:从原理到实战的完整指南
java·后端·spring
EatFan2 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp