SpringBoot统一响应格式带来的String双引号问题和类型强转失败问题解决

在开发中,经常会有一个自定义输出数据格式的场景,此时如果用到 ResponseBodyAdvice 做全局的数据格式控制,在响应纯字符串数据时可能会遇到某些奇怪的问题,本文描述了两个和 String 相关的问题的解决方案,内容可能和网上的其他有些不同,问题较简单,纯记录贴。 1. XXXX cannot be cast to java.lang.String 问题; 2. 响应的字符串携带双引号问题。

Shiro系列(二)——Shiro 多 Realm 实现

本文基于上一篇文章《 Shiro + Springboot + JWT 的整合》延续,示例项目也是在上篇文章的基础上扩展而来的。 一个系统一般都具有多种用户类型,如管理员、普通用户和运营者账号等,这些用户都存储在不同的表中。当然,通过对 Token 的内容进行条件判断,一个 Realm 是可以直接实现多个账号登录的,但是这样将导致不同用户的登录完全耦合在一起,这不是我们想看到的,所以有了多 Realm 的需求,并且 Shiro 是支持多 Realm 的。 但是如果有多个 Realm,Shiro 将对每个都进认证,而我们希望的是管理员。用户等都只调用自己的 Realm,所以对这些地方的逻辑要稍微做些改动。

Springboot修改默认异常处理

1. 继承BasicErrorController继承BasicErrorController可实现修改默认的全局异常处理,复写error方法修改Rest请求的修改,复写errorHtml实现修改错误处理视图。package com.nineya.user.controller;import com

Spring Security系列(三)——WebFlux配置方式以及多登陆入口实现

本文场景: 使用Spring Security做权限控制,系统包含普通用户和系统管理员两种类型,希望有不同的登录入口;并且在Spring Gateway上配置,Gateway使用的是WebFlux,无法兼容MVC,所以使用WebFlux配置Security。纯记录,目前项目还是小demo,贴的示例代

Spring Security系列(二)——过滤器链分析以及创建多个登陆入口

写在前面本文场景: 希望在网关上实现security统一进行权限认证,后续的服务间交互不再进行权限认证。但是系统有两个类型的账号,一个是普通用户,一个是系统后台管理员,完全是两个类型,希望创建给两个不同的登陆入口分别给两个类型的账号登录使用。想到的解决方法有两个:网关上的security想办法创建多

Spring Security系列(一)——登录认证基本配置

1. 开启Security@EnableWebSecurity@Configurationpublic class UserWebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Resource private

Vue入门——环境搭建以及第一个Vue项目运行

Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 本文描述Vue开发环境的搭建,以及如何创建和运行一个Vue项目。

使用NPS搭建内网穿透

NPS 是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持 tcp、udp 流量转发,可支持任何 tcp、udp 上层协议(访问内网网站、本地支付接口调试、ssh 访问、远程桌面,内网dns解析等等……),此外还支持内网 http 代理、内网 socks5 代理、p2p 等,并带有功能强大的 web 管理端。 本文描述如何搭建Nps服务端和客户端,进行内网穿透,并将Nps添加为服务,进行开机自启动等配置。

运维 

分布式数据库系列——(一)强一致性

​对于分布式系统而言,一致性是探讨当前系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果。在数据库领域,“一致性”与事务密切相关,又进一步细化到ACID(原子性、一致性、隔离性和持久性)四个方面。 ​ 分布式存储系统为了避免设备与网络的不可靠带来额的影响,通常会存储多个数据副本。逻辑上的一份数据同时存储在多个物理副本上,当同时存在读操作和写操作时就带来了数据一致性问题,所以多个副本数据上的一组读写策略被称为“一致性模型”,本文提到了状态一致性和操作一致性两个概念。 1. 状态一致性:数据的实际状态所体现的一致性; 2. 操作一致性:外部用户通过协议约定的操作,能够读取到的数据一致性,即用户感受到一致性,实际存储并不一定具有一致性。 从状态一致性视角看,在任何情况下数据只有两种状态,所有副本一致或者不一致。在某些条件下不一致的状态是暂时的,还会转换到一致的状态,那么这种不一致称为“弱一致性”,变更操作后数据一直是一致的则称为“强一致性”。

汇编入门-寄存器介绍以及汇编基础指令

汇编指令是机器指令的助记符,与机器指令一一对应。汇编存在多种形式,8086CPU目前主流的有AT&T和INTEL两种,Windows使用INTEL语法,UNIX平台的编译器一直使用AT&T语法。本文以8086CPU为例,主要介绍AT&T语法的基础汇编指令。1. 寄存器CPU由

图算法之无权最短路径 - 基于Neo4j实现

本文基于Neo4j 3.5版本,采用嵌入式的方法开发,neo4j本身其实已经实现了最短路径算法,本文虽然基于neo4j实现,但是更多的是做算法思想的记录,同时本文讲解的最短路径为无权最短路径。 - 无权最短路径与带权最短路径不同,带权最短路径可能权重最小的路径并不是路径最短的路径。而无权最短路径,仅按路径长短来衡量,所以求最短路径最合适的方法为广度遍历。 - 一般网上描述的找最短路径的方法为,从起始点开始广度遍历,找到终止点时停止,这个方法并不是性能最高的方法,本文要说明的是从起始点和终止点双向开始进行广度遍历的算法(双向广搜),可以极大提升找最短路径效率。

JVM原理(一)——JVM概述

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,文章从虚拟机底层讲解虚拟机的设计与实现。

通过javadoc生成文档

一、pom.xml 添加插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId>

python中logger的使用

正文# 日志名称:syslogger = logging.getLogger("sys")# 配置日志打印的级别,打印格式logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s %(message)s')

linux下的计划任务crontab

一、计划任务基本命令# 设定某个用户的cron服务crontab -u# 列出cron服务的详细内容crontab -l# 删除cron服务crontab -r# 编辑cron服务crontab -e# 启动服务service crond start# 关闭服务service crond stop#

运维