当前位置: 首页 > news >正文

无源码实现免登录功能

因项目要求需要对一个没有源代码的老旧系统实现免登录功能,系统采用前后端分离的方式部署,登录时前端调用后台的认证接口,认证接口返回token信息,然后将token以json的方式存储到cookie中,格式如下:
在这里插入图片描述
这里有一个auth_token采用JSON格式存储,尝试了好几种写入Cookie的方式,均无法实现,现将可以实现方式记录如下。

Nginx配置

首先,为了避免跨域问题,以及Cookie的作用域问题,必须将现有系统和免登录跳转系统配置到同一个端口下,配置如下

    server {listen       80;server_name  localhost;# 免登录跳转系统location / {proxy_pass http://127.0.0.1:8084;#proxy_cookie_path / "/; httponly; secure; SameSite=Strict";#proxy_cookie_flags ~ nosecure samesite=strict;}# 老旧系统location / {proxy_pass http://127.0.0.1:8000;proxy_cookie_path / "/; httponly; secure; SameSite=Strict";proxy_cookie_flags ~ nosecure samesite=strict;}

注意这里proxy_cookie_path和proxy_cookie_flags要注释掉,否则在免登录跳转系统中设置的Cookie在跳转到现有系统后无法认证成功,下面对这两个参数说明一下:

proxy_cookie_path

proxy_cookie_path / "/; httponly; secure; SameSite=Strict";

proxy_cookie_path:此指令用于修改通过Nginx代理传递的Cookie的路径以及其他属性。
/:指定Cookie的路径为根路径,这意味着Cookie对整个域名有效。
“; httponly; secure; SameSite=Strict”:这部分是对Cookie添加额外的属性:
httponly:此属性指示浏览器仅允许HTTP(S)协议访问该Cookie,不允许JavaScript访问,这有助于防止跨站脚本攻击(XSS)。
secure:此属性指示浏览器仅在HTTPS连接中传输该Cookie,不允许在不安全的HTTP连接中传输,这有助于保护Cookie不被中间人攻击窃取。
SameSite=Strict:此属性控制Cookie在跨站请求中的发送行为。设置为Strict意味着Cookie仅在同站请求中发送,不会在跨站请求中发送,这有助于减少跨站请求伪造(CSRF)攻击的风险。

proxy_cookie_flags

proxy_cookie_flags ~ nosecure samesite=strict;

proxy_cookie_flags:此指令用于设置或修改通过Nginx代理传递的Cookie的标志。
~:这是一个正则表达式匹配操作符,表示接下来的模式应用于所有匹配的Cookie。
nosecure:此标志指示Nginx移除Cookie中的Secure属性。这意味着即使原始Cookie设置了Secure属性,通过Nginx代理后,该属性将被移除,Cookie可以在HTTP和HTTPS连接中都传输。这通常不推荐,因为它降低了安全性。
samesite=strict:此标志指示Nginx添加或修改Cookie的SameSite属性为Strict。这与proxy_cookie_path中的SameSite=Strict类似,控制Cookie在跨站请求中的发送行为。
注意:通常情况下,不建议在生产环境中使用nosecure标志,因为它会降低Cookie的安全性。如果需要移除Secure属性,应该仔细考虑安全性影响,并确保有其他安全措施来保护数据。
这两行配置通常一起使用,以确保通过Nginx代理传递的Cookie具有适当的安全属性。然而,proxy_cookie_flags中的nosecure标志可能会抵消proxy_cookie_path中设置的secure属性,因此在实际应用中需要谨慎使用。

免登录跳转

搭建一个SpringBoot工程,前端实现一个简单的跳转页面test.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>OSS</title><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"><meta http-equiv="X-UA-Compatible" content="IE=Edge" />
</head>
<body><a href="http://192.168.31.112">http://192.168.31.112</a>
</body>
</html>

后端IndexController类关键方法如下

package org.example.onemaposs.controller;import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;@Slf4j
@Controller
public class IndexController {@Value("${app.login.url}")private String loginUrl;@Value("${app.user}")private String user;@Value("${app.pass}")private String pass;@Value("${app.index.url}")private String indexUrl;// 经过测试,该方法可以实现免登录功能,注意在Nginx中代理不能加如下两行,否测Cookie无法共享// proxy_cookie_path / "/; httponly; secure; SameSite=Strict";// proxy_cookie_flags ~ nosecure samesite=strict;@RequestMapping("/test")public String test(HttpServletRequest request, HttpServletResponse response, ModelMap model) {String token = null;JSONObject json = new JSONObject();json.put("user", user);json.put("pwd", pass);String str = doPost(loginUrl, json);JSONObject jsonObject = JSONObject.parseObject(str);JSONObject obj = jsonObject.getJSONObject("obj");JSONObject rtnJson = new JSONObject(true);JSONObject authToken = new JSONObject(true);if (obj != null && obj.containsKey("token")) {rtnJson.put("code", 200);rtnJson.put("msg", "登录成功");token = obj.getString("token");authToken.put("data", token);}String time = String.format("expires=%s; path=/", getTime());log.debug("Cookie time = {}", time);response.setHeader("authorization", token);response.addHeader("Set-Cookie", String.format("auth_token=%s; ", authToken.toJSONString()) + time);response.addHeader("Set-Cookie", "user_name=admin; " + time);response.addHeader("Set-Cookie", "is_anager=true; " + time);response.addHeader("Set-Cookie", "user_role={%22uId%22:%22650e5cc596d8932f88ec8c90%22%2C%22user%22:%22admin%22%2C%22realName%22:%22%22%2C%22role%22:%22Admin%22%2C%22userRolePrivilege%22:{%22rolePriv%22:[]%2C%22userPriv%22:{%22privileges%22:[]}}}; " + time);return "test";}private String getTime() {// 获取当前时间的ZonedDateTime实例ZonedDateTime now = ZonedDateTime.now(java.time.ZoneId.of("GMT"));// 增加8天ZonedDateTime futureDateTime = now.plusDays(8);// 定义日期时间格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);// 格式化日期时间return futureDateTime.format(formatter);}protected String doPost(String url, JSONObject json) {String rtn = null;CloseableHttpClient httpClient = null;try {httpClient = HttpClientBuilder.create().build();RequestConfig.custom().setConnectionRequestTimeout(5000).setSocketTimeout(5000).setConnectTimeout(5000).build();// 创建Get请求HttpPost http = new HttpPost(url);http.addHeader("Accept", "application/json, text/plain, */*");http.addHeader("Content-Type", "application/json");http.setEntity(new StringEntity(json.toJSONString(), "UTF-8"));CloseableHttpResponse response = null;// 由客户端执行(发送)Get请求response = httpClient.execute(http);// 从响应模型中获取响应实体HttpEntity responseEntity = response.getEntity();rtn = EntityUtils.toString(responseEntity);} catch (Exception e) {log.error(String.format("Search request throw exception: %s", e.getMessage()), e);} finally {if (httpClient != null) {try {httpClient.close();} catch (Exception e) {log.error(String.format("Close http client throw exception: %s", e.getMessage()), e);}}}return rtn;}
}

application.properties配置如下:

server.port=8084
server.servlet.context-path=/ossapp.login.url=http://192.168.31.112/v1/auth/login
app.user=admin
app.pass=4de93544234adffbb681ed60ffcfb941
app.index.url=http://192.168.31.112spring.thymeleaf.cache=false
spring.thymeleaf.check-template=true
spring.thymeleaf.check-template-location=true
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.enabled=true
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.excluded-view-names=
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

这样当访问http://192.168.31.112/oss/test时,系统通过端调用原有系统的认证接口,将相关的认证信息写入cookie,然后当前端跳转到新系统时,就实现了免登录功能。

几种写Cookie坑

由于这里写入Cookie的值为JSON格式,且为没有编码的,因此这里尝试了几种其他的方式写入Cookie,都失效了,因此记录如下:

后端Java实现

    private void setCookie(HttpServletResponse response, String key, String value) {log.debug("Set cookie {}={}", key, value);Cookie cookie = new Cookie(key, value);cookie.setMaxAge(3600 * 24 * 30);cookie.setPath("/");response.addCookie(cookie);}

无法写入JSON,提示错误如下

2024-10-01 21:40:56.737 DEBUG Set cookie data={"a":"b"} [http-nio-8084-exec-3](org.example.onemaposs.controller.IndexController:121)
2024-10-01 21:40:56.749 ERROR Servlet.service() for servlet [dispatcherServlet] in context with path [/oss] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value] with root cause [http-nio-8084-exec-3](org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/oss].[dispatcherServlet]:175)
java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie valueat org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:197)at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:123)at org.apache.catalina.connector.Response.generateCookieString(Response.java:1001)at org.apache.catalina.connector.Response.addCookie(Response.java:953)......

前端JavaScript实现1

采用jquery.cookie.min.js,代码如下

function setCookie(key, value) {$.cookie(key, value, {expires: 8,   // 有效期为7天path: '/',    // 在整个网站有效domain: '',   // 默认的域secure: false // 不使用安全协议});
}setCookie('auth_token', '{"data":"xxxxxx"}');

写入Cookie中的{、}、"、:、+、空格等等均被编码了,因此现有系统在读取后转JSON报错。

前端JavaScript实现2

以下这种方法也不行,去掉encodeURIComponent也不行


setCookies([["user_name", "admin"],["auth_token", "{\"data\":\"xxxxxx\"}"]
]);function setCookies(nameValuePairList) {var cookieList = nameValuePairList.map(function(nameValuePair) {var cookieString = nameValuePair[0] + "=" + encodeURIComponent(nameValuePair[1]);// 可以添加其他属性,如过期时间、路径、域等return cookieString;});document.cookie = cookieList.join("; ");
}function escapeCookieValue(value) {return value.replace(/{/g, '\\{').replace(/}/g, '\\}').replace(/"/g, '\\"').replace(/,/g, '\\,').replace(/;/g, '\\;').replace(/ /g, '\\ ');
}function setCookie(key, value) {$.cookie(key, value, {expires: 8,   // 有效期为7天path: '/',    // 在整个网站有效domain: '',   // 默认的域secure: false // 不使用安全协议});
}

前端JavaScript实现3

定义Cookie类也不行

let ht;
if (!ht) ht = {};ht.Cookie = function () {let _p = ht.Cookie.prototype;_p.getCookieVal = function (offset) {let endstr = document.cookie.indexOf(";", offset);if (endstr == -1) {endstr = document.cookie.length;}return unescape(document.cookie.substring(offset, endstr));};_p.set = function (name, value) {let expdate = new Date();let argv = arguments;let argc = arguments.length;let expires = (argc > 2) ? argv[2] : null;let path = (argc > 3) ? argv[3] : "/";let domain = (argc > 4) ? argv[4] : null;let secure = (argc > 5) ? argv[5] : false;if (expires != null) {let temp = 0;let rdigit = /\d/;if (rdigit.test(expires) && !isNaN(expires)) {temp = parseInt(expires);}temp = temp <= 0 ? 1 : temp;expdate.setTime(expdate.getTime() + (temp * 1000 * 3600 * 24));}document.cookie = name+ "=" + value// + escape(value)+ ((expires == null) ? "" : ("; expires=" + expdate.toGMTString()))+ ((path == null) ? "" : ("; path=" + path))+ ((domain == null) ? "" : ("; domain=" + domain))+ ((secure == true) ? "; secure" : "");};_p.get = function (name) {let arg = name + "=";let alen = arg.length;let clen = document.cookie.length;let i = 0;while (i < clen) {var j = i + alen;if (document.cookie.substring(i, j) == arg) {return this.getCookieVal(j);}i = document.cookie.indexOf(" ", i) + 1;if (i == 0) {break;}}return null;};_p.remove = function (name) {let exp = new Date();exp.setTime(exp.getTime() - 1);let cval = this.get(name);document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString() + "; path=/";};_p.removeAll = function clearAllCookie() {let keys = top.document.cookie.match(/[^ =;]+(?=\=)/g);if(keys) {for(var i = keys.length; i--;)  {let exp = new Date();exp.setTime(exp.getTime() - 1);document.cookie = keys[i] + '=0;expires=' + exp.toGMTString() + "; path=/";}}}
};
// cookie实例
ht.cookie = new ht.Cookie();ht.cookie.set('user_name', 'admin');
ht.cookie.set('auth_token', '{"data":"xxxxxx"}');

前端JavaScript实现4

使用document.cookie来设置Cookie也无法生效

$(document).ready(function() {let str = 'auth_token={"data":"xxxxxx"}; user_name=admin; is_anager=true;';let expirationDate = new Date();expirationDate.setDate(expirationDate.getDate() + 7);document.cookie = str + "expires=" + expirationDate.toUTCString() + ";path=/";
});

相关文章:

无源码实现免登录功能

因项目要求需要对一个没有源代码的老旧系统实现免登录功能&#xff0c;系统采用前后端分离的方式部署&#xff0c;登录时前端调用后台的认证接口&#xff0c;认证接口返回token信息&#xff0c;然后将token以json的方式存储到cookie中&#xff0c;格式如下&#xff1a; 这里有…...

大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

疾风大模型气象,基于气象数据打造可视化平台

引言 随着气象数据的广泛应用&#xff0c;越来越多的行业依赖天气预报与气候分析来做出决策。从农业、航空、能源到物流&#xff0c;气象信息无时不刻影响着各行各业的运作。然而&#xff0c;气象数据本身复杂且多样&#xff0c;如何将这些数据转化为直观、易于理解的图形和信…...

PHP安装后Apache无法运行的问题

问题 按照网上教程php安装点击跳转教程&#xff0c;然后修改Apache的httpd.conf文件&#xff0c;本来可以运行的Apache&#xff0c;无法运行了 然后在"C:\httpd-2.4.62-240904-win64-VS17\Apache24\logs\error.log"&#xff08;就是我下载Apache的目录下的logs中&am…...

[论文精读]Multi-Channel Graph Neural Network for Entity Alignment

论文网址&#xff1a;Multi-Channel Graph Neural Network for Entity Alignment (aclanthology.org) 论文代码&#xff1a;https:// github.com/thunlp/MuGNN 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&a…...

Study-Oracle-10-ORALCE19C-RAC集群搭建(一)

一、硬件信息及配套软件 1、硬件设置 RAC集群虚拟机:CPU:2C、内存:10G、操作系统:50G Openfile数据存储:200G (10G*2) 2、网络设置 主机名公有地址私有地址VIP共享存储(SAN)rac1192.168.49.13110.10.10.20192.168.49.141192.168.49.130rac2192.168.49.13210.10.10.3…...

1.8 物理层下的传输媒体

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 1 导引型传输媒体1.1 双绞线1.2 同轴电缆1.3 光缆 2 非导引型传输媒体2.1 无线电微波通信2.2 多径效应2.3 卫星通信2.4 无线局域网 在数据通信系统中&#xff0c;传输媒体是发…...

指纹定位的原理与应用场景

目录 原理 1. 信号特征收集 2. 定位算法 推导公式 距离估算公式 定位算法公式 使用场景 发展前景 指纹定位是一种基于无线信号强度(如Wi-Fi、RFID、蓝牙等)来实现室内定位的技术。它借助于环境中多个基站的信号特征来推断用户的位置。以下是对指纹定位的详细讲解,包…...

发现一款适合所有用户小巧且强大的编辑器(完美替换Windows记事本)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 编辑器 📒📝 功能亮点📝 适用场景📝 安装使用📝 替换Windows记事本🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 今天,发现一款小巧(仅1.26M)且功能强大的编辑器,适用于文本编辑,编程开发等,应该说是适…...

Mysql知识点整理

一、关系型数据库 mysql属于关系型数据库&#xff0c;它具备以下特点 关系模型&#xff1a;数据以二维表格形式存储&#xff0c;易于理解和使用。 数据一致性&#xff1a;通过事务处理机制&#xff08;ACID特性&#xff1a;原子性、一致性、隔离性、持久性&#xff09;保证数据…...

ISA-95制造业中企业和控制系统的集成的国际标准-(4)

ISA-95 文章目录 ISA-95ISA-95 & MES一、ISA-95是MES的系统标准二、ISA-95对MOM/MES的活动定义三、MES/MOM如何遵循ISA-95四、MES/MOM功能划分和边界定义 ISA-95 & MES ISA-95 作为企业系统与控制系统集成国际标准&#xff0c;提供了一个通用的框架&#xff0c;有助于…...

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…...

Disco公司的DBG工艺详解

知识星球里的学员问&#xff1a;可以详细介绍下DBG工艺吗&#xff1f;DBG工艺的优势在哪里&#xff1f; 什么是DBG工艺&#xff1f; DBG工艺&#xff0c;即Dicing Before Grinding&#xff0c;划片后减薄。Dicing即金刚石刀片划切&#xff0c;Grinding即背面减薄&#xff0c;…...

大学学校用电安全远程监测预警系统

1.概述&#xff1a; 该系统是基于移动互联网、云计算技术&#xff0c;通过物联网传感终端&#xff0c;将办公建筑、学校、医院、工厂、体育场馆、宾馆、福利院等人员密集场所的电气安全数据&#xff0c;实时传输至安全用申管理服务器&#xff0c;为用户提供不间断的数据跟踪&a…...

C++网络编程之IP地址和端口

概述 IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备&#xff0c;而端口则确保在目标设备上数据被交付到正确的应用或服务。因此&#xff0c;在网络编程中&#xff0c;IP地址和端口是密不可分的两个概念&#xff0c;共同构成了网络…...

陶瓷4D打印有挑战,水凝胶助力新突破,复杂结构轻松造

大家好&#xff01;今天要和大家聊聊一项超酷的技术突破——《Direct 4D printing of ceramics driven by hydrogel dehydration》发表于《Nature Communications》。我们都知道4D打印很神奇&#xff0c;能让物体随环境变化而改变形状。但陶瓷因为太脆太硬&#xff0c;4D打印一…...

网络安全的详细学习顺序

网络安全的详细学习顺序可以按照由浅入深、逐步递进的原则进行。以下是一个建议的网络安全学习顺序&#xff1a; 1. 基础知识学习 计算机网络基础&#xff1a;理解网络架构、TCP/IP协议栈、OSI七层模型、数据链路层到应用层的工作原理。 操作系统基础&#xff1a;了解Window…...

人工智能与机器学习原理精解【28】

文章目录 随机森林随机森林详解随机森林的详细解释1. 随机森林的基本概念、原理和应用场景、公式和计算2. 随机森林在机器学习、深度学习等领域的重要性3. 实际应用案例及其优势和局限性4. 随机森林在解决实际问题中的价值和意义 随机森林局限性的详细归纳随机森林主要的应用领…...

StarRocks 中如何做到查询超时(QueryTimeout)

背景 本文基于 StarRocks 3.1.7 主要是分析以下两种超时设置的方式: SESSION 级别 SET query_timeout 10;SELECT sleep(20);SQL 级别 select /* SET_VAR(query_timeout10) */ sleep(20); 通过本文的分析大致可以了解到在Starrocks的FE端是如何进行Command的交互以及数据流走…...

Windows 开发工具使用技巧 Visual Studio使用安装和使用技巧 Visual Studio 快捷键

一、Visual Studio配置详解 1. 安装 Visual Studio 安装时&#xff0c;选择你所需要的组件和工作负载。Visual Studio 提供多种工作负载&#xff0c;例如&#xff1a; ASP.NET 和 Web 开发&#xff1a;用于 Web 应用的开发。 桌面开发&#xff08;使用 .NET 或 C&#xff09…...

计算机网络-系分(5)

目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS&#xff08;Direct Attached Storage&#xff0c;直连存储&#xff09; NAS&#xff08;Net…...

React Native使用高德地图

在React Native项目中使用高德地图&#xff0c;主要涉及到几个关键步骤&#xff1a;安装高德地图相关的React Native模块、配置项目、申请高德地图API Key、以及在实际组件中使用高德地图功能。以下是一个详细的步骤指南&#xff1a; 一、安装高德地图React Native模块 首先&…...

排序算法的理解

排序算法借鉴了数学里面的不等式的思想 计算机不能直接继承不等式的传递性特征&#xff0c;这个时候才用递归调用去人为的分成不同的部分。或者说&#xff0c;一部分已经大致排序好的数放在一边&#xff0c;另外一边再排。 这是由于计算机只能两两比较数字才会出现的情况。它…...

Yocto - 使用Yocto开发嵌入式Linux系统_04 使用Toaster来创建一个image

Using Toaster to Bake an Image 既然我们已经知道了如何在 Poky 中使用 BitBake 构建图像&#xff0c;那么接下来我们就来学习如何使用 Toaster 构建图像。我们将重点介绍 Toaster 最直接的使用方法&#xff0c;并介绍它的其他功能&#xff0c;让你了解它的能力。 Now that we…...

【C#生态园】后端服务与网络库:选择适合你游戏开发的利器

网络通信不再难题&#xff1a;六种常用游戏开发网络库详解 前言 随着网络游戏行业的蓬勃发展&#xff0c;对于实时多玩家游戏服务和网络通信库的需求也日益增长。在游戏开发中&#xff0c;选择合适的后端服务和网络库可以极大地影响游戏的性能、稳定性和用户体验。本文将介绍…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30目录1. Proof Automation with Large Language Models概览&#xff1a;论文研究背景&#xff1a;技术挑战&#xff1a;如何破局…...

【漏洞复现】JeecgBoot 积木报表 queryFieldBySql sql注入漏洞

》》》产品描述《《《 积木报表&#xff0c;是一款免费的企业级Web报表工具&#xff0c;像搭建积木一样在线设计报表!功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等! 》》》漏洞描述《《《 JeecgBoot 积木报表 queryFieldBySq| 接口存在一个 SQL 注入漏洞&…...

Qt6 中相对于 Qt5 的新增特性及亮点

Qt 是一个领先的跨平台应用开发框架&#xff0c;涵盖了桌面、移动、嵌入式等多个平台。随着 Qt6 的发布&#xff0c;Qt 框架经历了重大升级和变革&#xff0c;带来了大量新特性和架构上的改进&#xff0c;使开发者可以更高效地开发现代化应用程序。本文将重点讨论 Qt6 相对于 Q…...

超轻巧modbus调试助手使用说明

一、使用说明 1.1 数据格式 和其他的modbus采集工具一样&#xff0c;本组件也支持各种数据格式&#xff0c;其实就是高字节低字节的顺序。一般是2字节表示一个数据&#xff0c;后面又有4字节表示一个数据&#xff0c;目前好像还有8字节表示一个数据的设备。不同厂家的设备对应…...

Percona Monitoring and Management

Percona Monitoring and Management (PMM)是一款开源的专用于管理和监控MySQL、MongoDB、PostgreSQL...

如何用dw做网站地图/怎样淘宝seo排名优化

沙市热点浸锌网格板厂家A一、密型钢格板简介&#xff1a;I型钢格板由I型扁钢(扁钢两边厚中间薄)和麻花钢(也叫扭绞方钢&#xff0c; 一般有5x5 6x6 8x8 的方钢&#xff0c;扭成的钢筋)进行交叉排列&#xff0c;并且焊接成中间带有方形格子的一种钢铁制品。二、密型钢格板的用途…...

网站手机端做排名/seo排名点击软件推荐

4.1 我可以仅用二进制形式发布一个遵循 GPL 的程序的修改版本吗&#xff1f; 不可以。GPL 的要旨是所有修改版本必须是自由软件——这意味着修改版本的源代码必须可供用户使用。 4.2 我从网上下载了二进制文件。如果我分发该副本&#xff0c;我必须也要获取源代码并分发&#x…...

单招网站开发/企业网站建设公司

eclipse插件的安装方法大体有以下三种:...

城乡住房和城乡建设网站查询/免费合作推广

spring MVC框架controller间跳转&#xff0c;需重定向。有几种情况&#xff1a;不带参数跳转&#xff0c;带参数拼接url形式跳转&#xff0c;带参数不拼接参数跳转&#xff0c;页面也能显示。 首先先来介绍一下不带参数的重定向&#xff1a; 我在后台一个controller跳转…...

336633域名/北京seo专业团队

CDA数据分析师 出品概述在正式进入Hadoop集群安装前&#xff0c;我们还需掌握Linux系统一系列基本操作方法和常用的工具软件的安装及使用方法。首先理解一下本文中的文件目录和文件概念。文件目录&#xff1a;类似windos系统下的文件夹&#xff0c;里面可以包含若干文件目录或文…...

甘肃住房和城乡建设局网站/百度百科推广费用

原地址&#xff1a;http://blog.csdn.net/u012085988/article/details/17531005 资源下载&#xff1a;http://download.csdn.net/detail/u012085988/6770625 &#xff08;最近csdn貌似出了问题&#xff0c;超链接不能用了&#xff0c;博客写好发布后发现被截短了&#xff0c;这…...