全部 文章 问答 分享 共找到60个相关内容
[问答] SpringBoot前后端分离,引入Spring Security。
SpringBoot前后端分离,引入SpringSecurity之后,浏览器地址访问接口会出现表单认证,可是如果我们是前后端分离的话,前端调用接口,那有该如何去认证呢?
2020-09-23 10:22 · Spring
[文章] SpringSecurity跟SpringBoot的整合-remember me
SpringSecurity跟SpringBoot的整合-rememberme系列文章前面我们已经学习了SpringSecurity跟SpringBoot的整合-项目创建SpringSecurity跟SpringBoot
2020-04-03 15:05 · RememberMe / Spring / Security / SpringBoot / 记住我
[文章] 简单易懂的Springboot-Mybatis配置篇
简单易懂的Springboot-Mybatis配置篇本文需要读者对Java基础,SpringBoot框架等有一定的了解.完整代码工具maven:3.6.1jdk:1.8IDEA2019.02SpringBoot
2020-09-02 20:47 · Springboot / Java
[文章] SpringSecurity跟SpringBoot的整合-通过注解控制访问权限
SpringSecurity跟SpringBoot的整合-通过注解控制访问权限系列文章:SpringSecurity跟SpringBoot的整合-项目创建SpringSecurity跟SpringBoot
2020-04-04 13:44 · Spring / Security / 权限控制 / javaWeb / 注解
[文章] springboot中集成JavaMail发送邮件
springboot中集成JavaMail发送邮件最近学习了下阳光沙滩博客后端的代码。在发送邮件的部分,使用的如下的组件:<!
2020-11-02 15:03 · java / springboot
[文章] 总结使用SpringBoot+Dubbo创建服务提供者项目和服务消费者项目的流程
总结使用SpringBoot+Dubbo创建服务提供者项目和服务消费者项目的流程这是我学习的笔记,有什么不对请帮忙指出来(1)总结使用SpringBoot+Dubbo创建服务提供者项目的流程①创建SpringBoot
2020-06-19 23:26 · java / spring / SpringBoot / Zookeeperr / dubbo
[文章] SpringSecurity跟SpringBoot的整合-项目创建
SpringSecurity跟SpringBoot的整合好想每次都想写系列文章,总是被各种事情打乱,然后就忘记了。在我的草稿箱里,还躺着其他的系列文章,哈哈。希望这个系列可以写完吧。
[文章] springboot项目使用jasypt加密数据库密码
springboot项目使用jasypt加密数据库密码导入依赖<dependency><groupId>com.github.ulisesbocchio</groupId&
2020-09-03 13:10 · SpringBoot / jasypt
[文章] SpringSecurity跟SpringBoot的整合-从数据库中读取用户信息校验
SpringSecurity跟SpringBoot的整合从数据库中读取用户信息校验前面文章:SpringSecurity跟SpringBoot的整合-项目创建SpringSecurity跟SpringBoot
[文章] Jenkins-GitHub自动化部署博客系统后端SpringBoot项目
本文就是一个简单一键部署springboot项目的例子。拉取博客系统项目到服务器(也就是自己GitHub的Java项目)Jenkins中新建job,配置job,选择第一个,自由风格。
2021-02-25 16:25 · Jenkins / springboot / 博客系统 / maven / 断点
[文章] SpringBoot整合Redis后报错 java.io.IOException: 远程主机强迫关闭了一个现有的连接
SpringBoot整合Redis后报错java.io.IOException:远程主机强迫关闭了一个现有的连接前言在写阳光沙滩博客系统的时候,接口不使用的时候控制台隔一会儿就报**(java.io.IOException
2020-09-07 08:38 · redis / bug / java
[文章] SpringBoot优雅的抛出业务异常
我这里提供一种优雅抛出异常的方式版本信息springBoot2.4.2jdk11具体步骤定义一个异常接口/***@authorlyne*@date2022/9/11*/publicinterfaceErrorCode
2022-11-28 19:28 · java / 小技巧 / springboot
[文章] SpringSecurity跟SpringBoot的整合-自定义登录页面
SpringSecurity跟SpringBoot的整合-自定义登录页面上一篇文章我们创建了项目自定义了错误页面登录方式也写了测试的用户和角色以及配置通过角色来限制请求SpringSecurity跟SpringBoot
2020-03-20 21:56 · springsecurity / 登录 / 权限 / 后台 / RABC
[问答] 后端框架
百度了解了SSM框架即Spring+SpringMVC+MyBatis博客后端是是SpringBoot+SpringMVC+Mysql想问一下(SpringBoot+SpringMVC+Mysql)也可以叫
2020-09-27 20:56 · 后台
[文章] SpringBoot常用配置项
缘由将过去常用的一些springBoot配置项整理下,其中如果缺少配置项恳请大佬们指出Spring通用spring:mvc:throw-exception-if-no-handler-found:truestatic-path-pattern
2022-10-06 11:53 · springBoot / 配置
[文章] SpringBoot+MybatisPlus项目配置MySQL+SqlServer两种数据库并动态修改SqlServer的IP
SpringBoot+Mybatis-Plus项目配置MySQL+SqlServer两种数据库并且动态修改SqlServer的IP和数据库名一需求通过mysql上的数据库获取到各个服务器的IP地址和服务器名称
2022-03-16 21:02 · java / mysql / SqlServer
[文章] ACTable +Mybatis-plus+SpringBoot 实现实体类自动建表
ACTableBean类自动建表最近换工作了,新公司使用的这套框架,觉得很有意思,比之前工作中面向数据库编程的编码模式方便许多,在这里分享给大家首先第一步创建一个SpringBoot的后端项目默认。
2022-03-20 20:48 · AcTable使用
[文章] 上传文件大小限制:Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes.
SpringBoot做文件上传时出现了Thefieldfileexceedsitsmaximumpermittedsizeof1048576bytes.错误,显示文件的大小超出了允许的范围。
2020-10-16 14:16 · springboot
[文章] MySQL简单查询
、架构优化与运维开发remark:mysql***************************2.row***************************id:100169book_name:SpringBoot
2021-12-11 00:42 · MySQL / 数据库
[问答] activiti集成springboot问题

一个超时业务的实现

目前实现思路是通过定时任务触发ExecutionListenre,在监听器中调用超时业务;

问题出现在超时业务中,我希望在其中实现对当前线程的暂停,同时发起一个新的线程。并进行初始化

发起新流程的业务进行了事务管理,在由前端控制调用测试正常,但由监听器调用时的情况下多次通过processId查询Task集合后查询结果为空集合

有没有大佬支几招救命

2022-09-20 22:50 · 后端 / 工作流 / Activiti
[文章] SpringBoot整合Mybatis plus
maven添加坐标导入jar包在pom中添加mybaitsplus的依赖,这里由于涉及到代码的自动生成,所以还是需要引入页面模板引擎,这里用freemarker。<!--mybatisplus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency><!--mp代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.2.0</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>配置文件写相关配置需要在配置文件上添加,除去基本的数据库连接配置和端口设置,其中还配置了mybatisplus的mapper的xml文件的扫描路径。spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/blog_vue?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername:rootpassword:123456mybatis-plus:mapper-locations:classpath*:/mapper/**Mapper.xmlserver:port:8081开启mapper接口扫描,添加分页插件通过@mapperScan注解指定要变成实现类的接口所在的包,然后包下面的所有接口编译后都会生成相应的实现类。其中注意@MapperScan注解中扫秒包的路径要指定对,paginationInterceptor是一个分页插件。packagecom.lzyan.blogvue.config;importcom.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.transaction.annotation.EnableTransactionManagement;@Configuration@EnableTransactionManagement@MapperScan("com.lzyan.blogvue.mapper")publicclassMybatisPlusConfig{@BeanpublicPaginationInterceptorpaginationInterceptor(){PaginationInterceptorpaginationInterceptor=newPaginationInterceptor();returnpaginationInterceptor;}}配置自动生成代码生成基本的CRUD代码,mybatisplus提供了一个代码的生成器,只需要写上去对应的参数,就可以直接数据库的信息生成对应的entity,service,mapper等接口和实现类。详细可以看官方说明:https://mp.baomidou.com/guide/generator.htmlpackagecom.lzyan.blogvue.config;importcom.baomidou.mybatisplus.core.exceptions.MybatisPlusException;importcom.baomidou.mybatisplus.core.toolkit.StringPool;importcom.baomidou.mybatisplus.core.toolkit.StringUtils;importcom.baomidou.mybatisplus.generator.AutoGenerator;importcom.baomidou.mybatisplus.generator.InjectionConfig;importcom.baomidou.mybatisplus.generator.config.*;importcom.baomidou.mybatisplus.generator.config.po.TableInfo;importcom.baomidou.mybatisplus.generator.config.rules.NamingStrategy;importcom.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;/***mybatis代码生成器*///演示例子,执行main方法控制台输入模块表名回车自动生成对应项目目录中publicclassCodeGenerator{/***<p>*读取控制台内容*</p>*/publicstaticStringscanner(Stringtip){Scannerscanner=newScanner(System.in);StringBuilderhelp=newStringBuilder();help.append("请输入"+tip+":");System.out.println(help.toString());if(scanner.hasNext()){Stringipt=scanner.next();if(StringUtils.isNotEmpty(ipt)){returnipt;}}thrownewMybatisPlusException("请输入正确的"+tip+"!");}publicstaticvoidmain(String[]args){//代码生成器AutoGeneratormpg=newAutoGenerator();//全局配置GlobalConfiggc=newGlobalConfig();StringprojectPath=System.getProperty("user.dir");gc.setOutputDir(projectPath+"/src/main/java");//gc.setServiceName("%sService");//service命名方式//gc.setServiceImplName("%sServiceImpl");//serviceimpl命名方式//自定义文件命名,注意%s会自动填充表实体属性!//gc.setMapperName("%sMapper");//gc.setXmlName("%sMapper");gc.setAuthor("lzy");gc.setOpen(false);//gc.setSwagger2(true);实体属性Swagger2注解gc.setServiceName("%sService");mpg.setGlobalConfig(gc);//数据源配置DataSourceConfigdsc=newDataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/blog_vue?serverTimezone=UTC&useSSL=true");//dsc.setSchemaName("public");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");mpg.setDataSource(dsc);//包配置PackageConfigpc=newPackageConfig();pc.setModuleName(null);pc.setParent("com.lzyan.blogvue");mpg.setPackageInfo(pc);//自定义配置InjectionConfigcfg=newInjectionConfig(){@OverridepublicvoidinitMap(){//todonothing}};//如果模板引擎是freemarkerStringtemplatePath="/templates/mapper.xml.ftl";//如果模板引擎是velocity//StringtemplatePath="/templates/mapper.xml.vm";//自定义输出配置List<FileOutConfig>focList=newArrayList<>();//自定义配置会被优先输出focList.add(newFileOutConfig(templatePath){@OverridepublicStringoutputFile(TableInfotableInfo){//自定义输出文件名,如果你Entity设置了前后缀、此处注意xml的名称会跟着发生变化!!returnprojectPath+"/src/main/resources/mapper/"+"/"+tableInfo.getEntityName()+"Mapper"+StringPool.DOT_XML;}});/*cfg.setFileCreate(newIFileCreate(){@OverridepublicbooleanisCreate(ConfigBuilderconfigBuilder,FileTypefileType,StringfilePath){//判断自定义文件夹是否需要创建checkDir("调用默认方法创建的目录");returnfalse;}});*/cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);//配置模板TemplateConfigtemplateConfig=newTemplateConfig();//配置自定义输出模板//指定自定义模板路径,注意不要带上.ftl/.vm,会根据使用的模板引擎自动识别//templateConfig.setEntity("templates/entity2.java");//templateConfig.setService();//templateConfig.setController();templateConfig.setXml(null);mpg.setTemplate(templateConfig);//策略配置StrategyConfigstrategy=newStrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);//strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);//strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));//strategy.setSuperEntityColumns("id");strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix("m_");mpg.setStrategy(strategy);mpg.setTemplateEngine(newFreemarkerTemplateEngine());mpg.execute();}}在数据库中创建两个表,大概如下CREATETABLE`m_user`( `id`bigint(20)NOTNULLAUTO_INCREMENT, `username`varchar(64)DEFAULTNULL, `avatar`varchar(255)DEFAULTNULL, `email`varchar(64)DEFAULTNULL, `password`varchar(64)DEFAULTNULL, `status`int(5)NOTNULL, `created`datetimeDEFAULTNULL, `last_login`datetimeDEFAULTNULL, PRIMARYKEY(`id`), KEY`UK_USERNAME`(`username`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8;CREATETABLE`m_blog`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`user_id`bigint(20)NOTNULL,`title`varchar(255)NOTNULL,`description`varchar(255)NOTNULL,`content`longtext,`created`datetimeNOTNULLONUPDATECURRENT_TIMESTAMP,`status`tinyint(4)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=11DEFAULTCHARSET=utf8mb4;然后运行上面的代码生成器的代码成功之后,相应的代码就自动生成了。
2020-07-16 15:09 · SpringBoot / Mybatis
[文章] Spring Boot笔记 启动配置原理
#以debug来理解在SpringBoot项目,主配置类的run()方法处打断点,以debug模式运行,可以看到如下代码,留意两个流程:1、创建SpringApplication对象2、运行run()方法
2020-09-02 21:35 · SpringBoot
[文章] SpringBoot与RocketMQ实战
安装RocketMQ我的环境这是单机搭建的,搭在了华为云的HECS上系统环境:Centos7.664bitjdk:1.8Maven:3.6.3Git部署RocketMQ这里直接进入主题安装RocketMQ,其他环境这里先不提了。RocketMQ官网:http://rocketmq.apache.org/先用git把源码给拉下来gitclonehttps://github.com/apache/rocketmq.git然后用maven打包编译这份源码,这个过程有点漫长...华为云HECS1核2G用了20分钟左右cdrocketmqmvn-Prelease-all-DskipTestscleaninstall-U编译完成后可以把编译好的压缩包复制到别的目录下#我这里复制到/home/rocketMQcpdistribution/target/rocketmq-4.7.1.tar.gz/home/rocketMQ解压打包好的文件tarzxvfrocketmq-4.7.1.tar.gz配置环境变量,其实可以不设置,但是配置了可以进一步简化broker的集群命令vim/etc/profile#在末尾添加,其中/home/rocketMQ/rocketmq-4.7.1是你解压后文件的所在地exportROCKETMQ_HOME=/home/rocketMQ/rocketmq-4.7.1exportPATH=$JAVA_HOME/bin:$ROCKETMQ_HOME/bin:$PATH#使配置文件生效source/etc/profile这里由于官方有个硬性要求,要求内存4g+,而我的辣鸡主机也就2g,得修改一下配置才可以启动,否则会有内存分配不够的问题#去到bin目录下,runserver.sh、runbroker.sh这两个文件就是即将要改的cdbin#修改第一个文件vimrunserver.sh#找到JAVA_OPT="${JAVA_OPT}-server-Xms8g-Xmx8g-Xmn4g-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=320m"#自定义配置成JAVA_OPT="${JAVA_OPT}-server-Xms512m-Xmx512m-Xmn256m-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=320m"修改第二个文件同理vimrunbroker.sh在启动之前先去配置一下broker的远程ip#可以查看broker的配置sh./bin/mqbroker-m#将公网IP写入配置文件中,也可以用vim来,我这里直接echo进去了echo'brokerIP1=xxx.xxx.xxx.xxx'>conf/broker.conf别忘了开在华为云控制台开启端口(阿里云也一样)启动nameserver#启动nohupshmqnamesrv&#看logtail-f/root/logs/rocketmqlogs/namesrv.log启动broker#启动autoCreateTopicEnable开启就会自动创建主题不然就需要手动创建了nohupshmqbroker-nxxx.xxx.xxx.xxx:9876-cbroker.confautoCreateTopicEnable=true&#看logtail-f~/logs/rocketmqlogs/broker.log关闭服务shmqshutdownbrokershmqshutdownnamesrv安装可视化管理面板有一个对RocketMQ进行扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫rocketmq-console,这个便是管理控制台项目这里先把代码拉下来(可以装在自己本地主机就行)gitclonehttps://github.com/apache/rocketmq-externals.git编译打包cdrocketmq-externals/rocketmq-consolemvncleanpackage-Dmaven.test.skip=true然后启动cdtarget/java-jarrocketmq-console-ng-2.0.0.jar--server.port=8080--rocketmq.config.namesrvAddr=xxx.xxx.xxx.xxx(公网ip):9876打开浏览器访问开始实战实战内容实现生产者(producer)写入消息和消费者(consumer)消费消息创建两个项目,对应生产者和消费者项目1:rocketmq-producer,项目2:consumer-producer,都只添加一个web依赖就可以了为两个项目添加坐标导入jar包<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.0</version></dependency>生产者代码编写首先是添加配置,我改成了yml的形式了rocketmq:name-server:xxx.xxx.xxx.xxx:9876#公网ipproducer:group:my_group添加一个User类publicclassUser{privateStringuserName;privateByteuserAge;//settergetter略@OverridepublicStringtoString(){return"User{"+"userName='"+userName+'\''+",userAge="+userAge+'}';}}写入消息@ServicepublicclassProducerService{privateLoggerlogger=LoggerFactory.getLogger(getClass());@ResourceprivateRocketMQTemplatemqTemplate;privateStringspringTopic="string-topic";privateStringuserTopic="user-topic";publicSendResultsendString(Stringmessage){//发送String类型的消息//调用RocketMQTemplate的syncSend方法SendResultsendResult=mqTemplate.syncSend(springTopic,message);logger.info("syncSendStringtotopic{}sendResult={}\n",springTopic,sendResult);returnsendResult;}publicSendResultsendUser(Useruser){//发送UserSendResultsendResult=mqTemplate.syncSend(userTopic,user);logger.info("syncSendUsertotopic{}sendResult={}\n",userTopic,sendResult);returnsendResult;}}提供两个RestfulAPI@RestController@RequestMapping("/producer")publicclassProducerController{@ResourceProducerServiceproducerService;@PostMapping("/string")publicSendResultsendString(@RequestBodyStringmessage){returnproducerService.sendString(message);}@PostMapping("/user")publicSendResultsendUser(@RequestBodyUseruser){returnproducerService.sendUser(user);}}消费者代码编写添加配置spring:main:web-application-type:none#不启动web容器rocketmq:name-server:xxx.xxx.xxx.xxx:9876#公网ipproducer:group:my_group消费topic="string-topic"的消息@Service@RocketMQMessageListener(topic="string-topic",consumerGroup="string_consumer")publicclassStringConsumerimplementsRocketMQListener<String>{privateLoggerlogger=LoggerFactory.getLogger(getClass());@OverridepublicvoidonMessage(Stringmessage){//重写消息处理方法logger.info("-------StringConsumerreceived:{}\n",message);//TODO:对接收的消息作处理}}消费topic="user-topic"的消息@Service@RocketMQMessageListener(topic="user-topic",consumerGroup="user_consumer")publicclassUserConsumerimplementsRocketMQListener<User>{privateLoggerlogger=LoggerFactory.getLogger(getClass());@OverridepublicvoidonMessage(Useruser){logger.info("########user_consumerreceived:{};age:{};name:{}\n",user,user.getUserAge(),user.getUserName());//TODO:对接收的消息作处理}}运行项目生产者消费者用postman测试测试topic="string-topic"的消息测试topic="user-topic"的消息生产者输出消费者输出遇到的问题Acomponentrequiredabeanoftype'org.apache.rocketmq.spring.core.RocketMQTemplate'thatcouldnobefoundspring项目启动的时候一直打印远程地址为空查看broker的启动信息的时候会发现192.168.0.158这个地址,这个地址只是个内网ip来的所以问题就是brokerIP是服务器的内网IP导致producer无法建立连接,所以这时候需要去修改conf/broker.conf文件,在前面搭建的时候有步骤Acomponentrequiredabeanoftype'org.apache.rocketmq.spring.core.RocketMQTemplate'thatcouldnotbefound我的问题是因为项目的配置文件写错了,正确地输入格式如此链接下方描述https://github.com/apache/rocketmq-spring/issues/98#issuecomment-582230155'spring:redis:database:0host:localhost........rocketmq:name-server:172.16.21.138:9876producer:group:short-message总结环境是尝试地搭了起来了,之后要慢慢学起来。
2020-08-01 14:40 · RocketMq
[问答] SpringSecurity第一次登陆后,第二次登陆是如何检校用户是登录过得。不用再登录?


我在实现自己的android项目中,想要写一个后端使用,用了只懂一点点的springboot,认证鉴权,想用springsecurity,不知道行不行的通。

2022-03-30 00:27 · 小白
[文章] SpringBoot集成ElasticSearch7.9.1
文档https://www.elastic.co/guide/index.htmlhttps://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started.html1.导入依赖<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.9.1</version></dependency>2.构建对象创建项目配置基本的项目问题:一定要保证,我们导入的依赖和我们的es版本一致编写配置类@ConfigurationpublicclassElasticSearchClientConfig{@BeanpublicRestHighLevelClientrestHighLevelClient(){RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(newHttpHost("localhost",9200,"http")));returnclient;}}1.创建索引@SpringBootTestclassEsApiApplicationTests{@AutowiredprivateRestHighLevelClientrestHighLevelClient;//索引的创建request@TestvoidtestCreateIndex()throwsIOException{//1.创建索引请求CreateIndexRequestrequest=newCreateIndexRequest("kuan_index");//2.执行请求CreateIndexResponsecreateIndexResponse=restHighLevelClient.indices().create(request,RequestOptions.DEFAULT);System.out.println(createIndexResponse);}}2.判断索引是否存在//判断索引是否存在@TestvoidtestExistIndex()throwsIOException{//1.创建索引请求GetIndexRequestrequest=newGetIndexRequest("kuan_index");//2.执行请求booleanexists=restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);System.out.println(exists);}3.删除索引//删除索引@TestvoidtestDeleteIndex()throwsIOException{DeleteIndexRequestrequest=newDeleteIndexRequest("kuan_index");//删除AcknowledgedResponsedelete=restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);System.out.println(delete);}
2020-10-01 09:23 · spingboot / elasticsearch
[问答] springBoot返回json数据问题
请问如何返回这种形式的json数据呢?我自己写的返回是这样的
2021-04-20 14:54 · json
[问答] 多表查询问题
springboot纯小白请赐教@Query(value="SELECTstudent_idstudentId,student_namestudentName,student_classstudentClass
2020-06-25 03:12 · springboot
[文章] SpringBoot配置文件加密处理
当我们使用一些第三方SDK或服务时,一般需要配置如密钥、授权码、AID等隐私信息,此外大多数人都有代码提交仓库的好习惯【是吧?】有时候会因为一些失误操作而将自己的隐私数据发布到gitee\github上,就完球了。我最近看了些博客,尝试了下使用Jasypt来保证配置文件的安全性首先导入maven包这里使用的新版3.0.4<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>编写一个自己使用的加密解密的小工具packagecom.lyne.moyu.uc.utils;importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.SimpleStringPBEConfig;/***Keafmd**@ClassName:JasyptUtils*@Description:*@date:2022-04-2511:18*/publicclassJasyptUtils{/***Jasypt生成加密结果**@parampassword配置文件中设定的加密密码jasypt.encryptor.password*@paramvalue待加密值*@return*/publicstaticStringencryptPwd(Stringpassword,Stringvalue){PooledPBEStringEncryptorencryptOr=newPooledPBEStringEncryptor();encryptOr.setConfig(cryptOr(password));Stringresult=encryptOr.encrypt(value);returnresult;}/***解密**@parampassword配置文件中设定的加密密码jasypt.encryptor.password*@paramvalue待解密密文*@return*/publicstaticStringdecyptPwd(Stringpassword,Stringvalue){PooledPBEStringEncryptorencryptOr=newPooledPBEStringEncryptor();encryptOr.setConfig(cryptOr(password));Stringresult=encryptOr.decrypt(value);returnresult;}/***@parampasswordsalt*@return*/publicstaticSimpleStringPBEConfigcryptOr(Stringpassword){SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();config.setPassword(password);//3.0.4版自动解密默认加密算法是PBEWITHHMACSHA512ANDAES_256,//1.8及以下版本可能需要自己替换安全文件,也可以在配置实体时修改config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");returnconfig;}publicstaticvoidmain(String[]args){//加密//盐值替换成自己熟悉的口令,此口令为解密密钥,需要妥善保管。//盐值也需要在第三步写入配置文件System.out.println(encryptPwd("yoursalt","123456"));}}使用加密的后的密文在配置文件中使用EMC()函数和生成的密文替换你的敏感数据,,同时声明你的jasypt密钥这里演示mysql的密码spring:application:name:u-centerprofiles:active:devjackson:date-format:yyyy-MM-ddHH:mm:sstime-zone:GMT+8mvc:throw-exception-if-no-handler-found:truestatic-path-pattern:/**web:resources:add-mappings:falsedatasource:url:jdbc:mysql://localhost:3306/mo_yu_ucenter?userUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=truedriver-class-name:com.mysql.cj.jdbc.Drivertype:com.alibaba.druid.pool.DruidDataSourceusername:rootpassword:ENC(lG4hT3FdNsFdWPmUCob7D4YUHZqyaSXEH/uYzfAWh58lSVwBz6wLd02jSgXbNHzH)jasypt:encryptor:password:yoursalt##优化加密密钥在配置文件中声明加密密码等于脱裤子放屁,这样之前的操作等于没做我的思路的是将jasypt密码存放在一个新的配置文件中,在你提交到仓库时将该文件忽略或删除,以保证密码本地可知。在资源目录下创建一个配置文件来存放密码jasypt.propertiesjasypt.password=yoursalt创建一个配置实体来读取配置文件/***@authorlyne*@date2022/11/28*/@Component@PropertySource("classpath:jasypt.properties")@ConfigurationProperties(prefix="jasypt")publicclassJasyptProperties{privateStringpassword;publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}重写jasyptStringEncryptor/***@authorlyne*@date2022/11/28*/@ConfigurationpublicclassJasyptConfig{@AutowiredprivateJasyptPropertiesmyJasyptProperties;@Bean("jasyptStringEncryptor")publicStringEncryptorjasyptStringEncryptor(Singleton<JasyptEncryptorConfigurationProperties>configProps){PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();JasyptEncryptorConfigurationPropertiesjasyptProperties=configProps.get();SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();config.setPassword(myJasyptProperties.getPassword());config.setAlgorithm(jasyptProperties.getAlgorithm());config.setKeyObtentionIterations(jasyptProperties.getKeyObtentionIterations());config.setPoolSize(jasyptProperties.getPoolSize());config.setProviderName(jasyptProperties.getProviderName());config.setSaltGeneratorClassName(jasyptProperties.getSaltGeneratorClassname());config.setIvGeneratorClassName(jasyptProperties.getIvGeneratorClassname());config.setStringOutputType(jasyptProperties.getStringOutputType());encryptor.setConfig(config);returnencryptor;}}修改.gitignore.DS_Storematerial-ui/node_modules/distlogs#Compiledclassfile*.classtarget/test/test#Logfile*.log#localenvfiles.env.local.env.*.local#Logfilesnpm-debug.log*yarn-debug.log*yarn-error.log*pnpm-debug.log*#Editordirectoriesandfiles.idea.vscode*.suo*.ntvs**.njsproj*.sln*.sw?*.jar*.war*.nar*.ear*.zip*.tar.gz*.rar*.iml#virtualmachinecrashlogs,seehttp://www.java.com/en/download/help/error_hotspot.xmlhs_err_pid*#privacyFilesjasypt.propertiesover
2022-11-28 19:57 · springboot / 小技巧 / 配置文件加密
[文章] SpringBoot启动tomcat出现空白页面
配置了mvc拦截这里一定一定一定改为true不然就会出现空白页面
2020-12-27 17:52 · bug
  • 1
  • 2