我的Java地带
个人Java基础知识,进阶知识,关于Java的所有知识
IT1995
每周个人笔记分享,欢迎广大网友查阅!
展开
-
Spring Boot笔记-使用dynamic-datasource配置多元数据库(MySQL和达梦)
以前都用JPA,配置多元数据库稍微麻烦那面一点点,这几天看了下年轻人的Java代码,发现Mybatis用得比较多了,而且还有比较好用的三方库,配置多元数据库,相对简单,在此记录下。在yml文件中配置,官方只给出了yml。properties没有提,但看了yml后,发现的确比properties要简洁好用多了。使用就相当简单了,用注解就可以了。下面我用jdbctemplate来调用下。这里有点要注意的primary必须指定一个,不然项目启动后会报错。启动后打印这个,就是成功了。原创 2024-07-29 08:34:16 · 446 阅读 · 1 评论 -
Spring Boot文档阅读笔记-Validating Form Input解析
这篇文章的主要功能是Web应用程序中验证表单输入是否合法的文章。PersonForm对象首先创建一个PersonForm对象:这个对象会验证PersonForm的用户名,代码如下:package cn.it1995;import javax.validation.constraints.Min;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;public原创 2022-05-31 08:56:55 · 307 阅读 · 0 评论 -
Java笔记-SM2(国密2)的调用及SM2、SM3、SM4使用场景
注意:本博文仅仅说明SM2的使用,应用场景等,不研究其算法。SM2是非对称加密算法,对应应用层程序员来说,使用逻辑和RSA一样。他的最主要的功能:①非对称加密;②签名和验签对于应用层程序员来说,必须熟悉他的使用,以及他的应用领域,一般在写一个安全的应用时,如果单单使用SM2是不安全的,基本上SM2、SM3、SM4都会同时使用。一般都是用SM4对数据内容加密,使用SM3,对内容进行摘要,再使用SM2,对摘要进行签名。这个是数据发送端做的事情。接收端,先用SM2,对摘要进行验签,验签原创 2021-08-31 09:05:57 · 40904 阅读 · 14 评论 -
Java笔记-加密应用在网络通信中的使用
逻辑是这样的:逻辑解释:1.OpenSSL生成RSA私钥和公钥,公钥存客户端,私钥存服务端;2.客户端与服务端的DH分别生成自己的公钥和私钥,并且使用相同的公钥和私钥算法;3.首先客户端把DH生成的公钥使用RSA加密,通过HTTP协议,发送到服务端,服务端把先解密RSA,然后把自己DH模块的公钥发给客户端;4.客户端和服务端都拿到了对方的公钥,再与自己的私钥,通过密钥公式,算出AES加密密钥。后面发送数据时都通过AES加密。程序运行截图如下:关键源码如下:..原创 2021-08-17 08:58:43 · 515 阅读 · 0 评论 -
Java笔记-DH密钥交换
DH密钥交换主要是两个公式的编写,即: ·公钥计算公式; ·密钥计算公式;生成随机数作为私钥截图如下:源码如下:DH.javapackage cn.it1995.tool;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;public class DH { private ...原创 2021-08-17 08:56:06 · 941 阅读 · 0 评论 -
Java笔记-非对称加密RSA的使用
使用OpenSSL生成对应RSA私钥和RSA公钥:#rsa私钥:genrsa -out rsa_private_key.pem 1024pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform pem -nocrypt -out rsa_private_key_8.pem#rsa公钥:rsa -in rsa_private_key_8.pem -pubout -out rsa_public_key.pemBase64使用的是这样Ma原创 2021-08-17 08:52:57 · 1336 阅读 · 0 评论 -
Java笔记-JdbcTemplate批量执行insert及update
主要就是batchUpdate函数用法如下:insert:String cmdTmp = "INSERT INTO %s(CREATE_DATE, UPDATE_TIME, XXX_ID, XXXID, XXX_TYPE) VALUES(?, ?, ?, ?, ?)";String cmd = String.format(cmdTmp, tableName);List<Object[]> batchArgs=new ArrayList<Object[]>();原创 2021-08-17 08:48:24 · 1478 阅读 · 0 评论 -
Java笔记-使用ServerSocket构建HTTP服务器
运行截图如下;浏览器访问:后端打印:项目结构如下:HttpCallback.javapackage cn.it1995.http;public interface HttpCallback { byte[] onResponse(String request);}HttpServer.javapackage cn.it1995.http;import java.io.IOException;import java.net.Serve.原创 2021-08-10 08:39:32 · 738 阅读 · 0 评论 -
Java笔记-Java中桥接模式
最近在研究一个APP,逆向后发现貌似用了桥接模式,特意学习了下Java中的桥接模式。关于C++的桥接链接如下:https://blog.csdn.net/qq78442761/article/details/98877170下面是java相关的代码以及自己的新理解!首先设计模式代表外招功法,是外招的模板,个人觉得他是为面向对象7个原则而准备的:面向对象程序设计要考虑7个原则:单一职责原则:设计目的单一的类;开放封闭原则:对扩展开发,对修改封闭;李氏替换原则:子类可以替换.原创 2021-06-22 08:48:12 · 538 阅读 · 0 评论 -
Java文档阅读笔记-Guide to the Hibernate EntityManager
1. IntroductinoEntityManager是JPA的一个API,他实现了JPA2.0的程序接口和程序生存周期。下面将介绍其使用方式。2. Maven Dependencies引入Hibernate和mysqlJDBC的依赖:<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId>.原创 2021-06-22 08:45:09 · 537 阅读 · 0 评论 -
Java笔记-Java端口扫描功能(含TCP包分析以及原理)
端口扫描主要是扫描其TCP端口。因为他有三次握手,握上了,如果有加密才进行传输层的加密。写个程序,去连接那个端口,能握手,就说明端口是开着的。关于UDP的端口扫描,有但意义不是很大,因为udp不会面向连接的。主要看服务端会不会回包,以及使用了什么协议如DTLS,如果服务端写成,客户端发送过来的数据异常,就回个异常的,这样就能扫描到,如果没写成这样,那就没办法了。Java代码如下:public class PortScanJava { public boolean is..原创 2021-06-15 09:00:37 · 1801 阅读 · 0 评论 -
Java笔记-Object中Timestamp转指定格式的
这里转成yyyy-MM-dd HH:mm:ss为例: @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Timestamp time;原创 2021-06-15 08:39:35 · 1078 阅读 · 1 评论 -
Spring Boot笔记-JPA自定义SQL语句参数为对象时如何操作
环境:SpringBoot v2.1.10.RELEASE举个例子:@Modifying@Query(nativeQuery = true, value = "update XXX.YYY set NAME=:#{#xxObject.getName()}, XXX_ID=:#{#xxObject.getXXXId()}, XXX_TYPE=:#{#xxObject.getXXXType()}, PYYE=:#{#xxObject.getPYYYe()} where ID = :#{#x.原创 2021-06-01 08:26:51 · 2374 阅读 · 2 评论 -
Java笔记-JdbcTemplate批量执行insert及update
主要就是batchUpdate函数用法如下:insert:String cmdTmp = "INSERT INTO %s(CREATE_DATE, UPDATE_TIME, XXX_ID, XXXID, XXX_TYPE) VALUES(?, ?, ?, ?, ?)";String cmd = String.format(cmdTmp, tableName);List<Object[]> batchArgs=new ArrayList<Object[]>();原创 2021-05-11 15:22:54 · 3152 阅读 · 0 评论 -
Spring Boot笔记-利用Quartz进行定时任务,利用websocket推送到浏览器(界面为thymeleaf)
效果如下,浏览器输入URL:等待一段时间,websocket主动推送后端打印:程序结构如下:QuartzConfig.java@Configurationpublic class QuartzConfig { @Bean public JobDetail job(){ return JobBuilder.newJob(QuartzJob.class).storeDurably().build(); } @Bean原创 2021-03-16 08:47:13 · 869 阅读 · 0 评论 -
Java笔记-SSLSocket双向认证实例
证书还是采用keytool生成的,这里都把信任库和私钥证书啥的,都放到了一个文件。程序运行如下:服务端:客户端:程序结构如下:源码如下:SslContextProvider.javapublic interface SslContextProvider { TrustManager[] getTrustManagers() throws GeneralSecurityException, IOException; KeyManager[] getK原创 2021-03-09 08:36:23 · 2086 阅读 · 3 评论 -
Java笔记-异常机制中try(...)中括号的用法
今天在看到某位Java大佬这样的写法,也让大家一起来观摩下:这里可以看到,将某些变量,和流放到了括号里面,在后面的代码中,也没有finally,也没见将其释放。经过查阅资料,发现,在java7后有了异常的升级用法。放到try()括号里面的,可以自动进行close。但是有条件的,变量需要继承或履行AutoCloseable相关的属性。如上面的三个对象:SSLSocket:再看下Socket:继续看下Closeable:OutPutStream:Closea原创 2021-03-05 08:33:18 · 2747 阅读 · 1 评论 -
Java笔记-Maven项目中引入公共模块及打包
如下结构:Common模块是公共组件。SpringBootTest调用了这个组件的只需要在SPringBootTest的maven下面包含:<dependency> <groupId>cn.it1995.common</groupId> <artifactId>Common</artifactId> <version>1</version></dependency>原创 2021-03-02 08:59:30 · 3087 阅读 · 1 评论 -
Java笔记-读取资源文件应该注意的问题(大文件解析、\r\n分割相关的)
目前在弄一个模拟程序,数据是从XXXXXXX里XXXXX获取的,也算是真实的把,将其放到资源文件中。如下代码在IDEA开发环境里面是正常的:byte[] bytesxxx = new byte[inputStreamxxx.available()];inputStreamxxx.read(bytesxxx);String allTextxxx = new String(bytesxxx);System.out.println("allText size:" + allTextxxx.leng原创 2021-01-26 09:33:09 · 861 阅读 · 1 评论 -
Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
Jasypt Spring Boot提供了Spring Boot应用程序配置文件的加密。有下面3种方式在项目中集成jasypt-spring-boot:1. 在classpath中添加jasypt-spring-boot-starter的jar包(maven添加对应的依赖),使用@SpringBootApplication及@EnableAutoConfiguration使得整个Spring环境中的配置文件都进行加密。2. 在classpath中添加jasypt-spring-boot的jar包,在原创 2020-09-22 13:46:12 · 1537 阅读 · 0 评论 -
Java笔记-对tomcat进一步认识
tomcat是一个servlet容器。当编写servlet的时候:public class MyHttpServlet extends HttpServlet{ @Override protected void doGet(HttpServeltRequest req, HttpServletResponse resp){ }}这里的HttpServeletRequest和HttpServletResponse其实是接口。tomcat将这两个实例化后,就传给Servlet。逻辑原创 2020-09-08 10:54:51 · 626 阅读 · 0 评论 -
HTTP笔记-SOAP基本概念
WebService是什么?只要能包含如下几点的都可以称为Web Service ·机器到机器(应用到应用)之间的交流; ·与平台无关的; ·使用网络进行通信WebService分为几类?SOAP及REST上面两种都有各自的优点,某些SOAP的WebService比RESTful更加好。SOAP的特点SOAP全称:Simple Object Access Protocol。使用这个协议请求和响应需要为XML格式。...原创 2020-08-26 09:26:38 · 859 阅读 · 0 评论 -
Java笔记-为客户端及服务端创建公私钥的密钥库
使用密钥库使得客户端与服务器之间进行安全的通信,通过下面的方式生成公钥私钥库:1. 创建client及server的keystore。2. 从keystore中导出certificate。3. 将client的certificate导入到server的keystore,将server的certificate导入到client的keystore。生成客户端及服务端的keystore下面这个命令生成2048位的RSA key有效期为365天并且别名为server,这些数据都存储到ser.原创 2020-08-26 09:24:13 · 1381 阅读 · 0 评论 -
Spring Boot笔记-新增嵌入式tomcat配置(修改tomcat中conf/server.xml)
这里以spring boot 2.x为例这里我直接贴代码,设置2个头,一个是X-Forwarded-For一个是X-Forwarded-Proto及将头设置为https。@Configurationpublic class TomcatConfig { @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = ne原创 2020-08-11 08:37:34 · 2728 阅读 · 0 评论 -
Java工作笔记-接入互联网的免费WebService
这里都是使用wsimport进行解析wsdl文件:如果遇到解析wsdl问题,那么可以进行这样修改将:<s:element ref="s:schema" /><s:any />改为:<s:any minOccurs="2" maxOccurs="2" />原因是这个可对面的服务器可能是用C#进行开发的。将wsdl下载到本地后,然后修改,在使用:wsimport -s . 绝对路径或相对路径主要是这个网站上的webServiceh原创 2020-08-07 14:12:22 · 546 阅读 · 0 评论 -
Java工作笔记-webService发布时通用的4个注解
@WebService@WebMethod@WebResult@WebParam@WebService对类进行注解1.serviceName:对外发布的服务名,指定WebService服务的名称:wsdl:service。默认值为Java类的简单名称+Service。2.endpointInterface:服务接口全路径,指定SEI(ServiceEndPointInterface)服务端点接口。3.name:要包含XMLWebService的名称。在默认情况...原创 2020-08-07 14:04:18 · 2347 阅读 · 0 评论 -
Java工作笔记-JPA中Repository新增自定义更新操作
这里因为某种自定义业务,需要自己写sql语句进行更新。或者某方言集不能用,需要对其进行手都更新。对此记录下。对应代码如下:@Repositorypublic interface Table1Repository extends JpaRepository<Table1, Integer> { @Query(nativeQuery = true, value = "select * from xxx.ccc.yyy") List<Object[]&.原创 2020-08-06 08:46:09 · 3234 阅读 · 1 评论 -
Spring Boot笔记-线程池调度计划仅运行一次
这里是有这样的一个需求,启动springboot后用一个新线程,跑一次就可以了,首先是线程池申请和配置:@Configuration@EnableAsyncpublic class AsyncConfiguration { @Bean("TaskExecutor") public Executor asyncExecutor(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); .原创 2020-07-15 08:37:29 · 1240 阅读 · 0 评论 -
Java笔记-模拟QQ三方登录(单点登录2.0)
本次例子模拟这样的情况:一共有2个spring boot应用:一个是某公司的web,第二个是QQ服务端。某公司的应用为127.0.0.1:8082QQ服务端为127.0.0.1:8081演示如下:点击使用QQ登录:在弹出的界面输入数据点击登录后:关键代码如下:某公司web端:MyController.javapackage cn.it1995.login.controller;import cn.it1995.login.util.Cooki原创 2020-06-21 21:03:42 · 1850 阅读 · 2 评论 -
Java笔记-使用jjwt生成jwt
jwt的全称为: JSON WEB TOKEN程序运行截图如下:maven添加:<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.6.0</version></dependency>代码如下:package cn.it1995.qqServer.uti原创 2020-06-21 14:08:10 · 2730 阅读 · 0 评论 -
Spring Boot笔记-404错误统一管理
这里有一点要注意:spring boot错误的页面都会到error的请求中,所以可以用如下的方式统一管理package com.xxxxx.apc.controller;import com.apc.apc.utils.ResultUtil;import org.springframework.web.bind.annotation.RequestMapping;import o...原创 2020-03-04 12:32:41 · 4941 阅读 · 1 评论 -
Spring Boot笔记-@ExceptionHandler拦截500服务器错误自定义数据回前端
如下代码:package com.xxxx.xxxx.handler;import com.xxxx.xxxx.utils.ResultUtil;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.Exception...原创 2020-03-04 12:15:01 · 6520 阅读 · 1 评论 -
Java工作笔记-使用fastjson把对象直接生成为Json
maven如下:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version></dependency>构造如下的类:package c...原创 2020-03-04 11:59:23 · 5388 阅读 · 1 评论 -
Spring Boot笔记-通过反射获取Spring Boot中的Bean(反射调用Service)
继承ApplicationContextAware获取ApplicationContext:package com.xxxx.xxxx.bean;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springf...原创 2020-03-04 10:58:11 · 15523 阅读 · 1 评论 -
Java笔记-获取当前时间及对当前时间进行加减及时间对比
这种方式就是获取当前时间:Date date = new Date();使用这种方式即可把时间往后推迟2天:Calendar calendar = new GregorianCalendar();Date date = new Date();calendar.setTime(date);calendar.add(calendar.DATE,2);//把日期往后增加一天.整数往...原创 2020-02-23 14:10:51 · 5352 阅读 · 0 评论 -
Java笔记-Spring Boot生成MD5摘要
工具类源码如下:package com.example.demo.tool;import org.springframework.util.DigestUtils;public class MD5Utils { public static String generateMD5(String originStr){ return new String(Dig...原创 2020-02-15 19:13:55 · 5105 阅读 · 3 评论 -
Spring Boot笔记-Hibernate中@ManyToOne及@OneToOne
ER图如下:这里只截取了部分,可见normalGoods表和user表中有关系。normalGoods和topGoods表有关系,其中对应的表内容如下:normalGOodstopGoodsuser其中对应的代码如下:TopGoods.javapackage com.it1995.demo.object;import lombok.Data;...原创 2020-02-13 11:51:16 · 5621 阅读 · 0 评论 -
Spring Boot笔记-IDEA使用JPA映射时解决cannot resolve column或cannot resolve table
view->Tool Windows->Database默认情况下看IDEA的左边:添加一个MySQL库,连接测试成功后!进入View->Tool Windows->Persistence随后点击Assign Data Sources...选择一个即可,就不会报错了!!!嘤嘤嘤(这个是突然间想起来乔碧萝殿下才打的)...原创 2020-02-12 21:27:32 · 8032 阅读 · 2 评论 -
Kafka笔记-kafka外网搭建及构建生产者
程序运行截图如下:后端如下:消费者如下:这里启动kafka先要运行zookpeer./zookeeper-server-start.sh ../config/zookeeper.properties这里要先修改下配置文件,在config下的server.properties:advertised.listeners=PLATNTEXT://122.51.24...原创 2020-02-11 13:52:05 · 4435 阅读 · 0 评论 -
Java笔记-JSP初步研究
JSP(全称JavaServer Pages)。其实他就是servlet,只是换了个表现形式,这个是面向界面的。感觉他还可以叫 Java Servlet Pages, 其实就是Java Server Pages 哈哈。与Sevlert类似, 初始化参数可以在web.xml 的<servlet> 中配置,如下例子:如下:下面举个例子,统计每个IP访问某一...原创 2020-02-04 11:47:15 · 4485 阅读 · 0 评论