背景在做课程项目的时候,需要使用到权限认证,但是如果在代码中的每个Service层的业务方法中来进行权限的判断未免有点太不优雅
所以这个时候就开始想到,是否能够将鉴权放在注解中或者在拦截器中直接进行权限判断,于是开始找框架
首先找到的是Spring Security,一看使用方法感觉自己头都大了,用起来未免过于复杂
然后找到的是Sa-token,虽然这个框架功能齐全,而且使用方便,但是发现他的Token直接交由框架管理。而我已经做好了Token的生成和解析,如果要引入的话需要在框架下实现,不想做代码的改动。
而且这也只是一个单体课程作业,虽然想将一些功能进行更好的实现,并不需要框架内的绝大多数功能,所以自己编写一个简单的鉴权工具。
前景提要因为是做一个简单的工单系统,所以并不需要多复杂的设计。
因为已经自己做了一个拦截器进行拦截Token并进行解析,并且把解析出来的 UserDTO 放入了持有类中
持有类:
123456789101112131415public class UserHolder { private static final ThreadLocal< ...
后端开发
未读学习 Redis 的过程中遇到了一些值得记录的东西,所以把它写下来
Redis 缓存刷新 Token用户在登录后需要根据Token来进行鉴权和用户信息,如果用户一直在活跃则需要 Redis 来做缓存(仅想代替 Session 的情况下,如果七天过期等长期有效则不需要),但是缓存需要设置过期时间,所以需要在用户进行请求的时候顺带刷新用户的token。
我们可以设置一个 RefreshTokenInterceptor 并把其优先级设高一点,来给用户刷新 Token ,这样每次用户请求的时候都能够刷新用户的过期时间。
Spring 集成了 Redis 的工具,所以我们可导包 spring-boot-starter-data-redis 后,在 Config 下注入 StringRedisTemplate( Interceptor 无法直接使用 @AutoWired )传入 Interceptor 。
123456789101112131415161718@Configurationpublic class MvcConfig implements WebMvcConfigurer { ...
网上创建容器的命令有点点小问题,为避免以后到处找命令,所以写一个备忘录记一下
MySQL1234567891011docker run --name mysql \-v /home/docker/mysql/log:/var/log/mysql \-v /home/docker/mysql/data:/var/lib/mysql \-v /mydata/mysql/conf:/etc/mysql/ \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=123456 \-d mysql:latest \--init-connect="SET collation_connection=utf8mb4_0900_ai_ci" \--init-connect="SET NAMES utf8mb4" \--default-authentication-plugin=mysql_native_password--skip-character-set-client-handshake
当然也可以写好配置文件后,使用配置文件方式进行启动
...
专升本结束了,纪念一下当时为了数据结构的考试而写的简单算法题目。
头文件LinkList.h
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <stdio.h>#include <stdlib.h>typedef struct LinkNode{ int data; struct LinkNode *next;}LinkNode;LinkNode *initLinkNode(){ LinkNode *head = (LinkNode *) malloc(sizeof(LinkNode)); head->next = NULL; return head;}//在节点后插入新节点void insertNode(LinkNode *node,int x){ LinkNode *newNode ...
问题描述在添加以及修改数据时,设置crate_time、update_time的时候经常需要重复的为字段设置相应的值
1234567891011121314151617181920212223 @PostMapping public R<String> sava(HttpServletRequest request, @RequestBody Employee employee) {... //设置当前创建时间 employee.setCreateTime(LocalDateTime.now()); employee.setUpdateTime(LocalDateTime.now());//设置操作人的ID employee.setCreateUser(empID); employee.setUpdateUser(empID);... return R.success("添加成功"); } @PutMapping public R<Strin ...
前端开发
未读在需要引用距离比较远的文件的时候,防止出现 ../../../...这种代码,使用路径别名 @/...直接定位到src目录下明显更为方便简洁
记录一下使用方法
导包
1npm i @types/node -D
修改 vite.config.js
1234567891011121314151617import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'//引入import { resolve } from 'path'// https://vitejs.dev/config/export default defineConfig({ //设置路径 resolve: { alias: { '@': resolve(__dirname, 'src'), }, }, plugins: [ ...
前端开发
未读自动生成ID相较于UUID,Nano ID体积极小而且用法非常简单且比起UUID不需要自己去除横杠
NanoID Github中文文档
安装:
npm i nanoid
消息订阅与发布轻量的消息订阅发布库,真的非常非常小
PubSubJS Github
使用教程
安装:
npm i pubsub-js
CSS动画库Animate.css官网
后端开发
未读SSM框架学完后正式开始的第一个项目,虽然是个教学项目,但是也会了解到一些实际项目时的开发流程和开发规范,此篇记录一下在写代码时遇到的大大小小的问题
教学项目来自动力节点的[SSM框架项目实战-CRM客户管理系统](SSM项目实战视频教程全套免费下载-动力节点 (bjpowernode.com))
无法找到Mapper配置文件异常:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
原因:
无效的绑定语句,说明无法找到mapper.xml文件,此时要么就是xml配置文件的包放错了,要么就是打包后并没有把xml配置文件一起打包进去,发生于xml文件在src目录下
解决方案:
在Maven配置pom.xml中build标签下把xml也放进打包的范围
1234567891011121314151617<build> <finalName>CRM</finalName> <resources> <resource> ...
记录一下SSM的配置以防哪天需要的时候忘记找不到(但是自从学了Spring boot后就不需要了,所以这个文章没用了)
Maven依赖123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 <dependencies> <dependency> <groupId>org.springframework< ...
SpringSpring的核心组件包含Bean、Core、Context、Expression
而Spring的核心功能主要有两个:IOC(控制反转)、AOP(面向切面编程)
IOCIOC的作用IOC也叫做控制反转,是一种设计原则,可以很好的降低代码之间的耦合,常见的使用方式称作依赖注入(DI)。Spring提供了一个IOC容器,将创建的Java Bean对象交给Spring管理,可以自动所需依赖进行注入。
IOC容器的引入极大的方便了开发时Bean的管理,注册在IOC容器里的Bean可以很方便的拿到Bean对象,只需要使用@Autowrite注解即可把所依赖的对象注入。
包括第三方的jar包的对象也可以使用IOC容器进行管理,只需要在配置文件,或者配置类中配置即可。
IOC容器的使用我们在以往写DAO层以及Service层到Web层通常的写法是这样的:
12345678public class Service{ Dao dao = new DaoImpl(); public void service(){ dao.meth ...