自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 在Remix中设置生产环境根路径的方法

前端项目打包后,部署到生产环境,经常需要修改静态资源的根路径和路由的根路径。最近,在学习Remix的时候找到了方法,打开vite.config.ts,相应的配置如下。其中,mode用于判断当前的环境,base用来设置静态资源的根路径,basename用来设置路由的根路径。

2024-09-15 14:40:49 216

原创 ASP.Net Core设置接口根路径的方法

但是,这样做了以后,swagger相关的接口路径并没有发生变化。也就是说,所有的接口都对应两个请求路径,一个是以acl开头的路径,另一个是swagger里面的请求路径。其中,UsePathBase方法添加了一个中间件,设置所有请求的根路径是acl,要注意中间件添加的位置,在MapControllers方法前面,才能生效。使用asp.net core开发微服务项目,需要给每个服务设置不同的根路径,这样既能使用网关转发请求,又方便对单个服务进行测试,保证请求路径的统一。

2024-08-06 15:29:58 446

原创 使用EFCore封装复杂查询结果的通用方法

这里面用到了左外连接查询,也就是查左表中所有数据,查右表中符合连接条件的数据,subRole属于右表的对象,所以可能是空的,如果直接把subRole.Id赋值给RoleId,会导致运行的时候报错,所以需要用as long?EFCore里面有一些方法可以方便的做关联查询,比如include方法,但是生成的SQL语句不尽人意,性能并不是最优的,想做内连接还是外连接,也没法用这个方法来掌控,要想完全掌控SQL语句,就需要用linq表达式来写查询逻辑。封装好了查询逻辑,就可以执行查询。下一步就是封装查询结果。

2024-06-21 18:52:32 304

原创 使用ASP.NET Core封装接口请求参数格式

UserSaveParam类就是用来封装请求参数的格式的,它会把实体类里面所有的属性都继承下来,并且可以定义与实体类里面同名的属性,进行覆盖,加上JsonIgnore特性,表示相应的属性不需要做json解析,也就不会接收到相应的参数值了,其他参数值仍然可以正常接收。还有一种方法,就是把目标对象里面的属性名称保存到HashSet里面,再遍历源对象里面的属性,一一比较属性名是否包含在HashSet里面,再做属性拷贝,性能会好一点,但也就那样。属性拷贝真的有必要吗?2、可以定义一个类,继承实体类,作为请求参数。

2024-06-21 18:24:32 314

原创 使用EFCore封装Service层CRUD代码

Key]set;这个类里面就包含一个主键属性,并且带了一个泛型Key,用来代表主键的类型,因为很多crud操作需要用到主键,因此需要这样定义,其他的实体类需要继承这个基类,比如User类[ Table("sys_user") ] [ Comment("用户表") ] public class User : BaseModel < long > {[ Comment("用户名") ] public string UserName {get;set;

2024-06-21 16:42:10 453

原创 ASP.NET Core自定义认证和授权搭建流程(使用JWT)

return new Result < T >(ResultCode . SUCCESS , "成功" , data);return new Result(ResultCode.SUCCESS, "成功", data);这里面需要定义一个类,继承IAuthenticationHandler接口,并实现AuthenticateAsync、ChallengeAsync、ForbidAsync、InitializeAsync方法if (!else。

2024-06-11 21:47:09 1535 7

原创 使用EFCore和Linq查询语句封装复杂的查询结果

其实,像这种简单的功能,做三张表的左外连接查询就能实现,没必要使用嵌套查询,因此efcore自动生成的SQL语句性能并不是最优的。这里仍然用到了linq中的连接查询,不同的是,使用了一个匿名类来保存查询结果。然后,又通过linq中的分组查询和子查询,对数据库的查询结果进行封装,将它保存到了users这个数组里面。这里用到了linq中的连接查询语法,并使用linq中的嵌套查询来封装User类中的Roles集合,生成的SQL语句如下。这里只用到了2次连接查询,没有用到任何嵌套语句,终于看到了自己想要的结果。

2024-06-10 15:08:49 510 4

原创 使用umi中的useRequest函数获取返回值中的data为空的问题

umi是一个react脚手架,最近有一个功能,需要在组件第一次渲染前请求一次,后面组件重新渲染不需要再次发送请求。要实现这种功能,我决定使用umi里面的一个hook函数,即useRequest。后来经过反复尝试,发现useRequest函数传入的第一个参数必须是一个异步函数,并且这个异步函数的返回值必须是一个包含data属性的对象,否则封装后的响应数据就获取不到。结果发现,categorys值始终为undefined,也就是说,useRequest返回对象的data属性始终为undefined。

2023-12-30 16:25:14 946

原创 使用cmake构建Qt6.6的qt quick项目,添加应用程序图标的方法

最近,在学习qt的过程中,遇到了一个难题,不知道如何给应用程序添加图标,按照网上的方法也没有成功,后来终于自己摸索出了一个方法。其中/logo.ico代表图标的相对路径,然后另存为logo.rc文件,删除原文件,如下图所示。3、在Qt Creator里面添加logo.rc和logo.ico文件到项目当中,如图所示。1、准备一张图片作为图标,保存到工程目录下面,如logo.ico。2、使用记事本在工程目录下创建logo.txt文件,输入如下内容。其中,logo.rc就是前面创建的文件,用于配置应用图标。

2023-12-09 20:38:46 1014 1

原创 使用ant design pro出现面包屑导航和标题消失的问题

后来,我把这个项目模板用于另外一个项目的前端页面,把整个项目的文件夹复制过去,进行修改,运行以后发现,面包屑导航和标题都消失了,但原来的项目模板是可以显示面包屑导航和标题的。然后,我换了一种方式,使用git从码云上面拉取项目源码,再用npm install下载依赖包,运行以后发现,面包屑导航和标题又出现了,不知道具体原因究竟是什么。前端时间,我用ant design pro搭建了一个后台权限管理的项目模板,里面用到了PageContainer组件,默认会显示面包屑导航和标题,如图所示。

2023-11-01 11:35:40 792 1

原创 form-create-designer整合element-plus使用方法

最近在使用form-create-designer生成表单的时候遇到了很多问题和各种报错,按照官方文档的方法一步步来做,发现行不通,后来经过不断尝试,终于找到了使用方法,这里做一下总结。

2023-08-08 17:44:51 1377 1

原创 springboot2.7.6与springsecurity和JWT整合方案

新版本的springsecurity与旧版本的使用方法有点不一样,最近探索了一下springsecurity与JWT的整合方案,进行一下总结。

2023-07-25 12:51:17 893 2

原创 springboot配置文件添加自定义配置报错解决方案

前段时间,我在springboot项目的application.yml文件里面添加了一段自定义配置,结果变成了红字,意味着报错,看着很不爽,所以在网上寻找解决方案,终于找到了一个方法。2、然后,在这个文件夹下新建一个配置文件,additional-spring-configuration-metadata.json。其中,name是自定义配置的名称,type是数据类型,description是配置的描述信息。1、首先,在resources文件夹下面新建一个文件夹,META-INF。

2023-07-20 18:15:01 373

原创 分享一个MySQL存储过程

这个案例中,就是将t_menu_btn_authority表的数据查出来,然后循环遍历游标,保存到t_menu_btn_authority_1表里面。前端时间,写了一个MySQL存储过程,用来同步表数据,可以作为参考。

2023-04-11 21:28:10 77 1

原创 springboot2.7.6整合springsecurity相关配置

这里面的逻辑是,获取当前已认证的用户信息,保存在securityUser对象里面。其中,filterChain方法里面定义了最核心的配置信息,包括登录接口的请求路径,用户名、密码的参数名,登录成功的处理类的对象,登录失败的处理类对象,退出的接口路径,退出时删除cookie,退出的处理类对象,还包括处理跨域的配置等。这里面的逻辑就是,根据用户名查询用户信息,如果结果为空,就抛异常,如果不为空,就把用户信息保存到securityUser里面,并返回这个对象。登录的时候,会调用这个方法。2、这是核心配置方法。

2023-01-30 15:01:56 1992

原创 Java抛出自定义异常,报java.lang.reflect.UndeclaredThrowableException: null的错误

结果运行后,报java.lang.reflect.UndeclaredThrowableException: null,而且前端并没有显示对应的异常内容。需要继承RuntimeException,不要继承Exception,即可。最近项目中使用了自定义异常,并做了全局异常处理,抛出异常的代码如下。后来发现,问题出在FebsException这个自定义异常类上。这样,项目就能正常运行,前端也能显示对应的异常内容。

2022-10-13 10:27:55 7038

原创 Java使用KeyStore存储AES对称加密的密钥

其中,KeyStore的类型必须设置JCEKS,否则保存SecretKey这种对称加密的密钥会报错。KeyStore类是Java当中的密钥库,专门用于存储密钥,以下代码用于生成keystore文件。

2022-09-20 14:44:53 1753

原创 Linux常用命令总结

2、根据进程号查看某个进程的安装路径。1、查看某个端口被哪个进程占用。

2022-09-01 09:06:59 251

原创 Linux中springboot项目在后台启动,并加载外部配置文件命令

其中,./config/application.yml是外部配置文件的路径,log.log是日志文件。

2022-08-30 16:51:43 1383

原创 使用docker容器搭建redis集群(三主三从)

增加如上所示配置,给每个redis节点设置不同的端口号,复制并创建6个配置文件。因为docker是以host模式启动,所以要防止端口冲突。这里挂载了redis的配置文件,并且以host网络模式启动容器,给每个容器挂载不同的配置文件,以此类推,共启动6个容器。4、使用redis-cli执行cluster info和cluster nodes查看集群信息。搭建集群,其中192.168.182.128是宿主机的ip地址。3、进入其中一个容器内部,执行如下命令。1、修改redis的配置文件。......

2022-08-14 18:10:50 641

原创 使用shardingjdbc实现读写分离配置

基于MySQL主从复制实现,其中m0是mysql的主库数据源,s0是mysql的从库数据源,具体配置一定要根据shardingjdbc的版本来写,不同的版本差异很大,查看官方文档一旦选错了版本,运行出现问题,很难发现错在哪里,浪费了很多时间!...

2022-08-03 22:08:23 542

原创 使用docker容器搭建MySQL主从复制

注意,mysql的配置文件开头要加上[mysqld],我就是一开始没加这个东西导致配置怎么改都不生效,浪费了很多时间。重启容器,使配置生效。其中,master_log_file和master_log_pos分别对应上图中的File和Position。3、在/root/docker/mysql/master下创建主节点的配置文件mysql.cnf。4、在/root/docker/mysql/slave下创建从节点的配置文件mysql.cnf。尝试向主节点的表中添加记录,会自动复制到从节点上。...

2022-07-31 00:13:58 262

原创 docker容器不能远程访问的原因

今天在虚拟机里面启动了一个mysql的docker容器,发现在宿主机连接不上,只有进入容器内部才能对它进行访问,网上百度了半天,尝试各种方法都不管用,干脆死马当活马医,重启一下docker引擎试试看,使用如下命令。然后,重启容器,发现竟然可以连接上了,害我浪费了那么多时间,唉!...

2022-07-30 16:09:56 780 2

原创 shardingjdbc水平分库分表配置以及垂直分库配置

值得注意的是,使用druid连接池,连接字符串属性用url,而使用hikari连接池,连接字符串属性要用jdbc-url。2、springboot配置文件如下。

2022-07-20 22:40:09 467

原创 kafka eagle(EFAK)使用中所遇到的坑

1、从官网下载kafka eagle2.1.0,解压后得到如下目录,2、添加环境变量3、进入conf目录,修改system-config.properties文件。因为当前只有一个kafka服务器,所以设置efak.zk.cluster.alias=cluster1,就可以了。修改zookeeper的访问配置cluster1.zk.list=localhost:2181。注释cluster2和cluster3的所有相关配置。配置文件中默认使用mysql保存数据,相关配置如下结果在mysql中创建了

2022-06-04 10:54:43 3731

原创 windows下Kafka的安装配置总结

1、从官网下载kafka,解压后得到如下目录2、进入config目录,修改zookeeper.properties配置文件,设置dataDir=…/…/zk-data,zookeeper启动后会自动创建zk-data文件夹,保存所需数据。确认zookeeper的端口号配置,clientPort=2181。3、修改server.properties文件,设置advertised.listeners=PLAINTEXT://localhost:9092,在生产环境中,localhost改成服务器所在的ip地址

2022-06-04 10:10:01 916 1

原创 补充一条MySql中的sql语句,用于批量插入和更新

MyBatis中的配置文件如下<insert id="insertOrUpdateBatch"> insert into aishu_job(job_id,job_type,job_name,job_desc,client_name,client_ip) values <foreach collection="list" item="job" separator=","> (#{job.jobId},#{job.jobType},#{job.jobN

2022-05-27 10:51:26 398

原创 使用MongoDB导入Json字符串,插入文档

代码如下:String uri = "mongodb://localhost:27017";try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("testdb"); MongoCollection<JsonObject> collection = database.getCollection("test", Jso

2022-05-19 14:02:57 942

原创 解决OpenFeign远程调用需要传递请求头的问题

这里需要配置一个Bean,代码如下@Configurationpublic class FeignConfiguration { /** * feign拦截器,设置cookie请求头 * @return */ @Bean public RequestInterceptor requestInterceptor(){ return new RequestInterceptor() { @Override

2022-05-04 15:00:07 2026

原创 补充一个md5加密的方法

所需依赖如下<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version></dep

2022-04-06 22:58:46 322

原创 Java调用webservice服务接口步骤详解

1、使用如下命令,生成webservice的Java客户端文件wsimport -s 文件目录 -p 包名 -keep wsdl发布地址生成的文件如下然后,将这些文件复制到工程目录下。2、执行如下代码,就可以调用webservice接口,得到响应数据WsSmsService smsService=new WsSmsServiceService().getWsSmsServicePort();String resXml = smsService.sendSms(xml);其中,xml是传入

2022-04-06 22:51:55 2758

原创 使用RestTemplate获取响应头中的cookie,并在请求头加上cookie

最近在做一个项目,需要使用RestTemplate发送请求,做一次远程登录,需要拿到登录后的cookie,然后加到请求头上面,再次获取数据,代码如下Map<String,Object> params=new HashMap<>();params.put("username",username);params.put("password",password);ResponseEntity<String> entity = restTemplate.postForEn

2022-03-20 21:44:22 10589 1

原创 springsecurity与gateway网关整合配置

本项目的登录认证和鉴权功能在不同的服务器模块里面运行,其中登录认证功能在内部的应用服务器里面实现,鉴权功能在网关实现,这里着重讲springsecurity在gateway网关里面的鉴权功能的配置。1、核心配置类如下@EnableWebFluxSecuritypublic class SecurityWebfluxConfig { @Bean SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity htt

2022-03-12 23:35:49 7962

原创 springsecurity使用自定义登录过滤器实现并发session

springsecurity中的相关配置如下@Overrideprotected void configure(HttpSecurity http) throws Exception { http.exceptionHandling() .authenticationEntryPoint(new UnauthorizedEntryPoint()) .and().csrf().disable() .authorizeReque

2022-03-11 14:38:08 1010

原创 springsession使用请求头获取sessionid,得到session对象

如果客户端是手机app,非浏览器,就不能通过cookie来访问session对象,因此需要在登录成功后,将sessionid添加到响应数据中,下次用户访问,就在请求头当中带上sessionid,后端通过从请求头获取sessionid,得到session对象。springsecurity中的相关配置如下@Beanpublic HttpSessionIdResolver sessionIdResolver(){ return new HeaderHttpSessionIdResolver("Auth

2022-03-11 14:12:00 2646

原创 springdata redis配置序列化

其中,key使用string序列化,value使用json序列化。今天总结了一下redis配置序列化的方法,代码如下。

2022-03-09 22:22:49 1144

原创 JasperReport生成PDF报表小节

1、使用Jaspersoft Studio制作PDF模板,生成一个jrxml文件。2、编译jrxml文件,生成jasper文件,然后复制到springboot工程中的resources目录下。3、引入所需依赖<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>

2022-02-28 11:19:53 1288

原创 SpringSecurity用法详解,解决maximumSessions(1)不生效的问题

1、定义核心配置类,使用如下注解@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class TokenWebSecurityConfig extends WebSecurityConfigurerAdapter在配置类中注入所需属性@Autowiredprivate UserDetailsService userDetailsService;@Autowire

2022-02-07 17:25:44 4673 2

原创 实现单点登录的2种方式

最近在思考关于单点登录和认证授权方面的问题,总结了单点登录的2种方式。1、基于session和redis实现这种方式适用于PC端和移动端网页的服务器接口。首先,后端拿到前台传过来的用户名、密码,然后查询数据库,进行校验。校验通过后,将用户的个人信息包括用户权限保存到session里面,再将session存到redis里面。下次前端发请求,就从session里面取出用户信息,包括用户的权限,然后做授权。如果session当中没有用户信息,说明没登录,就向前端发送未登录的信息。2、基于JWT和redi

2022-02-02 14:00:33 1716

原创 使用拦截器和JWT实现Java后端接口的权限访问控制

最近发现,后端接口的权限访问控制通过使用springmvc里面的拦截器,就能够实现,方法比较简单,这里做一些总结。1、在登录接口查询数据库中的用户信息和权限信息,得到当前用户相关的权限,然后把权限信息添加到JWT的字符串里面,经过加密以后生成token,将token作为响应数据,传递给前端。2、定义一个拦截器,从请求头当中取出token,对token进行解密,得到里面的权限信息,然后获取当前访问接口的名称,与token中的权限信息进行比对,如果用户拥有当前接口的权限,就允许访问,否则就抛异常,代码如下

2022-01-30 16:08:16 4677

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除