自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 no package kubelet available

k8s安装

2022-08-08 08:54:20 1856 1

原创 Element UI+vue+Springboot实现分页数据加载

前言分页功能在web应用中属于最为常见的功能,特别是在用表格展示大量数据的场景下。前端实现首先选择Element UI的两个组件 el-pagination和el-table组件这两个组件没有必然的联系,el-table只需绑定数据源即可 <el-table :data="emps" border stripe> <el-table-column prop="name" label="姓名" align="left" fixed width="120">&

2021-05-16 10:38:03 764

原创 Springboot+websocket+vue实现监听mysql数据库且实时通知前端

前言前端采用:vue+sock.js+stomp.js后端采用:springboot+websocket项目需求:多个用户端提交报修信息,管理端web实时接收并显示。实现思路:参考我简单叙述下:后端通过轮询数据库进行监听,如何监听数据库及判断是否为新的报修信息–这部分业务代码可以参考上述链接。本篇文章的重点有两个:(1)前端如何建立websocket连接(2)后端如何通过websocket的订阅模式同时通知所有订阅者有新的消息到达。后端实现(1)导入websocket依赖 &lt

2021-04-18 21:41:56 7650 3

原创 Vue+elementUI+SpringBoot项目-上传用户头像(2)

前言上篇文章讲了前端如何上传文件,本篇文章主要讲解后端对于图片的接收和存储。分析(1)接收图片:controller参数采用MultipartFile(2)存储图片:将图片的二进制流直接存储在数据库,这样做肯定不太合理,会对数据库性能造成一定的影响。将图片的地址即url存储在数据库,图片实体存储在服务器的文件夹里,当服务器开启时,可以通过url直接访问到图片。实现(1)后端如何处理参数 @PutMapping("/") @Transactional public

2021-04-18 20:51:32 604

原创 Vue+elementUI+SpringBoot项目-上传用户头像(1)

前言  一直感觉头像上传是个非常基础简单的功能,可是实现此功能用了将近2天的时间,所以记录下走过的坑。  前端采用vue+elementui,后端采用springboot。本篇文章先介绍前端文件的上传,后一篇介绍后端如何进行接收和存储的。实现(1)首先用element ui为我们定义的头像上传组件。 <el-upload class="avatar-uploader" action="#" accept=".jpg,.jpeg

2021-04-18 20:29:08 1827 1

原创 Vuex数据刷新后,如何做持久化处理

前言今天做vue项目时需要实现多个组件的数据同步,首当其冲选择了vuex。vuex介绍:参考项目需求:在用户管理界面更改用户名及其头像成功时,主界面home的用户和头像要同步更新。分析  首先明确一点js代码是运行在内存中的,代码运行时的所有变量、函数也都是保存在内存中的。刷新页面,以前申请的内存被释放,重新加载脚本代码,变量重新赋值,所以这些数据要想存储就必须存储在外部,例如:Local Storage、Session Storage等。  回到项目中,当我修改用户信息后一定会调用init方

2021-04-15 21:50:28 243

原创 微人事-spring security session与servlet里session的区别

前言上一节实现session并发的时候,注意到一个细节//注册sessionsessionRegistry.registerNewSession(request.getSession(true).getId(), principal);为什么要手动注册一个session呢,web服务器不是默认给每个独立的请求创建一个session吗?不注册的话,会怎么样?分析(1)首先先聊下web服务器里的session创建时机,当一个新的请求到来时,HttpSessionListener接口(实现的监听器)

2021-03-20 15:51:15 392

原创 微人事-session并发问题-踢掉已登录的用户(2)

前言上一节,了解spring security如何处理session并发。今天将在微人事项目里处理session并发问题,实现踢掉已登录的用户。分析(1)获取session集合通过sessionRegistry对象 final List<SessionInformation> sessions = sessionRegistry.getAllSessions( authentication.getPrincipal(), false); (2)通过阅读源码,sessio

2021-03-16 11:44:31 372

原创 微人事-session并发问题-踢掉已登录的用户(1)

前言spring security的登录逻辑是在UsernamePasswordAuthenticationFilter#attemptAuthentication方法中实现的,但是attemptAuthentication的调用者却是UsernamePasswordAuthenticationFilter的父类AbstractAuthenticationProcessingFilter间接调用的,源码如下public void doFilter(ServletRequest req, ServletR

2021-03-16 10:00:45 347

原创 微人事-hr对象为啥需要重写equals 方法和 hashCode 方法

前言今天实现微人事-如何踢掉已登录用户功能遇到一个问题,在查询一个用户对象所对应的session集合时,涉及到了对象的比较。集合类型: //object 指的是用户对象 Set<String> 指的是session集合 ConcurrentMap<Object, Set<String>> principalssession的获取//authentication.getPrincipal()返回的是一个对象List<SessionInformation

2021-03-15 13:18:36 111

原创 微人事-spring security登录认证分析

前言vhr登录认证(1)用户名+密码+验证码(2)对于用户的角色认证vhr采用了spring security做认证及授权,今天想来总结下整个登录的流程。分析上图可以先大概看下流程(1)spring Security 中有一个非常重要的对象叫做 Authentication,我们可以在任何地方注入 Authentication 进而获取到当前登录用户信息,Authentication 本身是一个接口,它有很多实现类,最常用的就是 UsernamePasswordAuthenticationTok

2021-03-14 17:08:04 394

原创 微人事-spring security之json形式登录

前言今天看登录逻辑代码发现一个问题,spring security前后端登录默认采用的key-value形式,但是目前github 上vhr最新代码支持json登录和key-value,那么如何实现呢?实现(1)首先明确spring security登录逻辑是在UsernamePasswordAuthenticationFilter过滤器里实现的。public Authentication attemptAuthentication(HttpServletRequest request, HttpS

2021-03-12 10:39:39 266

原创 微人事-邮件发送模块-rabbitmq可靠性的优化

前言邮件模块的功能:当 hr 向系统中录入一个员工时,录入成功后,系统会自动向消息中间件 RabbitMQ 发送一条消息,这条消息包含了新入职员工的基本信息,然后 mailserver 则专门用来从 RabbitMQ 上消费消息,根据收到的消息,自动的发送一封入职欢迎邮件。当然,在理想情况下邮件一定可以发送成功,但是一旦到生产环境下,就会有很多不可控的元素比如网络抖动怎么办?如何确保消息的可靠性?rabbitmq优化(简说)(1)数据库建立邮件发送日志表public class MailSendL

2021-03-11 20:21:36 395

原创 Springboot POI Excel的导入与导出

后台管理系统经常会用到表格来展示数据,如用户基本信息,若管理员需要将用户信息保存到本地,则需要对用户信息进行导出,导出的文件大多采用excel。java中对于excel的读写可以采用POI一、POI简介Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。二、PO

2021-01-12 13:36:06 314 1

原创 微人事-总结

vhr项目:地址目前跟随江南一点雨大佬已经完成微人事的百分之80,因为一直在赶进度,所以得做个总结。已完成模块1.登录模块2.权限组3.职称管理4.职位管理5.部门管理6.基本资料7.操作员管理未完成模块1.邮件发送2.工资账套3.员工聊天已完成界面:...

2021-01-12 12:00:01 4885 13

原创 springboot+mybatis调用存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。这个程序的内容一般就是一组sql语句的集合。优点:存储过程可封装,并隐藏复杂的商业逻辑。存储过程可以回传值,并可以接受参数。可以减少网络传输,存储过程直接在数据库服务器运行。缺点数据库迁移需要改动,移植性不行。(大型企业一般不会考虑使用)一 navicate如何建立存储过程 参考declare:声明变量into xxx: 给xxx赋值存储过程如何调用 (输出参数前面加

2021-01-06 11:49:37 5285

原创 Vue 如何解决跨域问题

springboot解决跨域问题 参考那么前端怎么解决跨域呢,设置代理。步骤:在vue项目的根目录创建 vue.config.jsproxyObj['/'] = { //websocket ws: false, //后端地址 target: 'http://localhost:8081', //是否跨域 changeOrigin: true, /* '^/'是个正则表达式,匹配路径 ''修改成的地址 */

2020-12-21 13:03:49 220

原创 Vue 路由按需加载(路由懒加载)

需求:vue前后端分离的项目中,需要动态加载所有的菜单项,我们无法在router.js里提前注册路由信息。解决: 需要我们按需注册路由(即运行时注册)步骤(1)后端传来的component一般都是字符串,我们需将其格式化成对象,然后按需注册。export const formatRoutes = (routes) => { let fmRoutes = []; routes.forEach(router => { //批量定义数据 后端传来的menu对象里的

2020-12-21 12:53:36 840 2

原创 Vue中axios的网络请求封装

  在我们前后端分离的项目中,一般会使用http交互,vue推荐使用的网络请求框架是axios,其实就是在ajax基础上封装的框架,但是我们还可以在代码里对axios进行进一步的封装,方便我们直接使用。步骤(1)在vue的src根目录下创建utils包,在utils包下创建api.js文件(名字可以自定义),对各种类型的请求进行封装。import axios from 'axios'//根路径 方便全局修改let base = '';//post请求 键值对拼接在url地址上export

2020-12-17 20:57:08 299

原创 Java Script箭头函数及this指向问题

js的箭头函数是ES6标准中的,只要是对函数书写的一种简化。先看下普通函数与箭头函数的书写形式写箭头函数,我们记住一个顺序就好,参数、箭头、函数体、这个顺序记住就足够了,参数、箭头、函数体、这三个是必须的,函数名可以没有,但这三项必须有,一些简写的方式也是简写这三项里的东西。简写1、只有一个参数时,() 可省略//不简写var demo = (x) =>{ console.log(x);}//简写var demo = x =>{ console.log(x)

2020-12-16 10:53:36 360

原创 mybatis生成逆向工程报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException

今天执行mybatis逆向工程,出现jdbc数据库连接错误:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.Nat

2020-12-15 15:22:34 182

原创 安装 Vue CLI 出错:npm ERR! EEXIST: file already exists, cmd shim ‘D:\nodejs\node_global\node_modules\@vu

npm命令 安装vue脚手架npm install -g @vue/cli出现如下错误npm ERR! code EEXISTnpm ERR! path D:\nodejs\node_global\node_modules\@vue\cli\bin\vue.jsnpm ERR! dest D:\nodejs\node_global\vuenpm ERR! EEXIST: file already exists, cmd shim 'D:\nodejs\node_global\node_mod

2020-12-14 13:57:18 11238 11

原创 Vue 的三种插槽 单个插槽、具名插槽、作用域插槽

目录  单个插槽  具名插槽  作用域插槽一、单个插槽单个插槽就是指,的作用类似于占位符。举个例子: //定义一个全局子组件 Vue.component('child',{ template: '<div><slot></slot></div>', }) var vm=new Vue({ el: '#root' })<!--引用child组件--><di

2020-12-05 20:35:25 611

原创 Springboot实现自动登录的功能

目录:概念实现自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ时,登录界面会有记住密码这个功能,下次进入qq会进行自动登录。浏览器的自动登录是指用户在登录成功后,在某一段时间内,如果用户关闭了浏览器并重新打开,或者服务器重启了,都不需要用户重新登录了,用户依然可以直接访问接口数据。那么应该如何实现呢,其实spring security已经为我们提供了相应的支持。实战:(1)创建spring工程,引入web和security的依赖。pom.xml如下:<dependen

2020-12-03 15:51:58 2065 1

原创 Springboot实现定时任务的两种方式

定时任务在我们日常项目开发中会经常使用,如数据库的备份。springboot对于定时任务的实现也作了很便捷的自动化配置,实现的方式共有两种:一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz 。 一、@Scheduled 二、Quartz 一、@Scheduled(1)@Scheduled的实现相对简单,但是 Quartz更加灵活。首先创建spring项目,引入web依赖即可。(2)在application启动类上加上@Enabl

2020-12-02 16:42:38 477

原创 Springboot整合Swagger,再也不用担心接口文档了

  Swagger 2是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。简单来说,根据项目的接口生成规范化的接口文档,而且可以进行接口的测试类似于post man。话不多说,开始今天的学习。(1)创建spring项目,引入web依赖,手动添加swagger的相关依赖。pom.xml如下:<dependencies> <dependency> <groupId>org.springframework.boot<

2020-12-02 13:24:58 93

原创 Spring boot整合freemarker实现邮件模板的发送

目录:1、环境配置2、邮件模板3、邮件的发送一、环境配置邮件协议:邮件的发送协议:SMTP邮件的接收协议:POP3模板选择:目前主流的模板引擎:thymeleaf和freemarker(手动添加依赖),至于优缺点可以参考:两者比较,本文采用的模板是freemarker。创建springboot项目,添加web、freemarker和mail的依赖pom.xml如下<dependencies> <dependency> <groupId&gt

2020-12-01 16:35:04 772

原创 Spring boot整合RabbitMQ

目录:一、RabbitMQ简介  RabbitMQ安装不必我多说,linux和windows环境下都可以安装,我是在windows环境下进行安装的,安装RabbitMQ之前需要先安装Erlang,因为Rabbit MQ 是建立在Erlang OTP平台上,而且安装Erlang 时要注意安装的RabbityMQ 所依赖的Erlang版本。  RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而且支持跨平台。

2020-11-30 21:11:34 456 2

原创 Spring boot实现WebSocket的单聊与群聊功能

前段时间我写了一篇文章:实现Springboot实时监听mysql数据库的变化且前端实时更新那篇文章就使用了websocket技术,有兴趣可以看看。话不多说,开启今天的学习!!!一、 websocket的简述WebSocket为浏览器和服务器之间提供了双工异步通信功能,也就是说我们可以利用浏览器给服务器发送消息,服务器也可以给浏览器发送消息,目前主流浏览器的主流版本对WebSocket的支持都算是比较好的,但是在实际开发中使用WebSocket工作量会略大,而且增加了浏览器的兼容问题,这种时候我们更

2020-11-30 15:23:18 552

原创 spring security 基于数据库的认证

学习本篇文章之前一定 要具备spring security的基础,可以参考:security基础学习上篇文章我们spring security登录的用户与密码是手动进行设置的,有两种方式:一种是application.properies文件中设置,还有一种是java配置类里进行设置。但是我们在实际的项目开发里一般都会利用数据库进行权限认证,这样也有利于用户权限的动态更改。实战(1)创建web项目,引入security、web 、mysql、mybatis与druid依赖即可(druid手动进行配置)

2020-11-27 21:07:04 303

原创 Mybatis 返回结果里面嵌套List

需求:需要查询Menu表里每个pattern所对应的多个roles角色角色表public class Role { private Integer id; private String name; private String nameZh;Menu表public class Menu { private Integer id; private String pattern; private List<Role> roles;查询

2020-11-27 18:33:05 3035

原创 Spring boot整合Spring security

我们一般用到的主流安全框架有两种:ShiroSpring Security  相对于 Shiro,在 SSM/SSH 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。  本文主要讲解spring security实战:(1)创建web项目,引入security和web依赖即可

2020-11-26 20:14:38 522

原创 springboot实现session共享

应用场景如何解决应用场景session是指多个http请求共享的会话。如果我们后台只有一个服务器,则不存在共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图:如何解决思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方此时我们先创建新的springboot项目,引入 Web、Spring Session 以及security、 Redis:<dependencies> <dependency>

2020-11-24 10:59:35 2447

原创 springboot解决跨域问题

  跨域问题其实前后端都可以解决,说到跨域,我认为先了解下什么是同源策略。  同源策略是由Netscape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是JSONP,JSONP虽然能解决跨域但是有一个很大的局限性,那就是只支持GET请求,不支持其他类型的请求,而今天我们说

2020-11-22 16:13:24 131 2

原创 postman发送post请求一直不成功

我出现的问题postman结果为后台springboot拦截到的路径发现url中存在error解决方案:添加头部使用原生的json格式返回正确结果

2020-11-22 15:42:55 5339

原创 Springboot单文件上传和多文件上传

单文件上传多文件上传文件上传采用的是SpringBoot默认用的是StandardServletMultipartResolver,servlet版本要求3.0以上SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/"); @PostMapping("/upload") public String upload(MultipartFile file, HttpServletRequest request){

2020-11-21 22:00:35 446 1

原创 Maven 中 Maven-dependencyManagement作用

这篇讲的很nice :传送门其实就是版本控制,父类声明版本(但不会引用),子类直接引用,而且子类可以声明自己的版本。

2020-11-18 17:38:39 110

原创 实现Springboot实时监听mysql数据库的变化且前端实时更新

一、需求分析项目需求是 多个用户端提交报修信息 ,管理端web实时接收并显示。首先用户端是通过提交http请求去更新报修表,而管理端与后端采用websocket实现实时通信。现在的难点在于如何监听mysql数据库中报修表的变化。二、解决思路解决方案一使用mysql_udf_http(根据mysql表自动触发发送http请求通知后端),后端使用websocket通知前台进行数据更新。我个人认为这种是最好的解决方案,但此方案基本都是在linux系统下进行实现的。解决方案二也是我采用的,后台采用轮询

2020-11-17 15:04:53 16013 2

原创 解决springboot的静态工具类中使用mybatis的mapper对象为空

首先熟悉ssm开发的小伙伴都知道,mapper对象的注入一般在controller层。@Controllerpublic class LoginController { @Autowired public LoginMapper loginMapper;但是数据库的操作不一定只限于controller类中,如果我在普通java工具类中需要操作数据库,那我们直接注入会生效吗?@Componentpublic class TokenUtil { @Autowir

2020-11-17 09:52:57 2186 1

原创 2020自我小结

2020对我和对世界都是不用寻常的一年,在这还是希望世界的疫情可以早点结束,也非常感谢服务在一线的志愿者和医生。而2020对于我来说也是人生的一个转折点,2019.6我大学毕业,并于当月在当前实习的公司辞职,然后便投身于浩浩荡荡的考研大军中,坚持了5个多月(可能每个考研人的这段经历都非常深刻,而且也不想像任何人提起,因为这段经历只有他自己懂得,幸好还有几个小伙伴的陪伴,煽情了过!!!),终于在寒冷的12月结束了这次考研旅途。考完感觉数学发挥很惨,并不抱有一丝的希望了,感觉这半年的努力都白费了,那段时间确

2020-11-16 21:45:34 151

空空如也

空空如也

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

TA关注的人

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