- 博客(28)
- 收藏
- 关注
原创 多角色权限验证
代码中的角色类型已提前使用jwt存入到token中,并使用工具类将token中的角色类型提取出来(token工具类本人已发布)。(3)在拦截器中进行权限验证(token中提前存入角色类型)(2)使用自定义注解为接口设置权限(以注解在类上为例)
2025-05-10 14:59:03
169
原创 Axios初始化问题
今天在后端实现多角色权限验证的业务功能后,在前端使用axios进行测试,第一次用户登录时使用的是user角色登录,功能正常使用,但是当使用admin角色登录后,发现使用user权限的接口正常使用,而admin权限的接口访问权限不够,一通调试后,将问题锁定在Axios初始化上。这是我设置的Axios,我在Axios初始化时将token存入到请求头中,而Axios在无特殊操作情况下只会初始化这一次,这就造成请求头中的token只会存入一次,后续再使用axios发起请求时,请求头中的token不会进行刷新。
2025-05-10 14:45:30
125
原创 数据导出Excel
若想要自定义excel表字段名则需要使用@ExcelProperty注解设置,不使用注解默认为实体类属性名。(3)Controller接口。
2025-05-06 20:10:21
193
原创 SpringMvc学习-2(异常处理器、拦截器)
顺序:preHandler --> return true --> controller --> postHandler --> afterCompletion。其中重写的三个方法从上往下分别表示,拦截到请求后,请求方法执行前的处理,请求方法执行后的处理,请求方法执行后的处理之后的处理。异常处理器的作用:处理器方法执行过程中出现了异常,跳转到对应的视图,在视图上展示友好信息。(2)创建异常处理方法并使用@ExceptionHandler设置该方法处理哪个异常。拦截器链的执行顺序(来源于黑马程序员)
2025-04-29 15:38:01
134
原创 SpringMvc静态资源访问不到问题记录
项目在启动tomcat服务器进行部署时会将项目代码编译后与项目静态资源放在classes文件夹下,而我的图片上传后,保存的路径是设置在如下目录下,这就造成了项目在编译启动后,前端上传图片后无法使用后端返回的图片路径加载图片。今天在实现图片上传时,在图片实现保存后,将保存的路径返回给前端,前端使用该路径进行访问,加载图片,发现访问不到,检查拦截器也没问题,检查静态资源映射也没问题,就是访问不到图片。(1)classpath:指的是编译后的字节码文件存储路径,一般为target目录下的classes目录。
2025-04-24 16:40:42
377
原创 SpringMvc实现文件上传
(4)前端设置请求体类型为multipart/form-data。(3)使用MultiFile类接收前端所传的文件参数并保存文件。(2)设置上传文件大小限制(必须设置,否则报错)(1)导入所需jar包。
2025-04-24 16:03:33
218
原创 IO流学习-2(转换流、打印流、数据流、序列化流)
当文件编码方式与程序编码方式不一致时会产生中文乱码问题,使用转换流可以控制读取文件字符以什么编码方式进行读取。打印流可以更方便更高效的打印数据出去,能实现打印什么出去就是什么出去。用法与打印字节流一致,不同在于构造器参数中一个是可传字节流对象一个是可传字符流对象。该构造方法可传文件对象,文件路径,字节输出流,表示往哪个地方输出打印。打印流无法直接追加数据,需要在原始流中设置追加数据。(2)对象字节输入流(对象反序列化)数据读取顺序须与数据写入顺序一致。(1)对象字节输出流(对象序列化)
2025-04-20 11:15:48
207
原创 IO流学习-1(File对象、原始流、缓冲流)
字节输入缓冲流包装了字节输入流,自带一个8KB大小的缓冲数组,假设需要读取16KB大小的文件,而程序中只定义了一个1KB大小的字节数组用来读取数据,首先程序先从磁盘中读取8KB字节的文件存入缓冲数组,然后再用1KB大小的字节数组从缓冲数组中读取数据。缺点:(1)使用该方法读取整个文件内容性能很差,原因是程序是在内存中运行的,而内存是无法直接读取磁盘中的内容,内存想要读取磁盘内容需要系统调用耗费系统资源,使用该方法读取文件内容每读取一个字符都需要系统调用,从而性能很差。
2025-04-18 20:54:24
624
原创 SpringMvc学习-1
方法中的参数为List<>接口时,SpringMvc会认为该参数为实体类对象,会造这个接口对象,但接口无法造对象就会报错,但我们希望SpringMvc不要造对象而是直接将前端传递的参数直接存入List中,此时可使用@RequestParam绑定参数关系。方法中的参数为pojo对象,而前端传递的参数为普通类型的参数,当前端传递的参数名称与pojo对象中属性的名称一致时,SpringMvc会自动将前端传递的参数赋值给pojo对象对应的属性。使用@RequestBody注解对方法中的参数进行标记。
2025-04-16 15:17:42
244
原创 Spring学习-3(事务管理)
某业务A开启事务T,该业务范围内还有事务T1,T2,Spring开启事务后会将事务T1,T2加入到T中,此时事务T1,T2变成了事务T。此时若需要加入日志记录,无论业务处理过程中成功或失败均需要进行日志记录,但是在业务A中记录日志会让日志事务也加入到事务T中,事务T中的所有操作都会同成功,同失败。此时就需要日志记录的事务不加入到事务T中。事务传播行为:事务协调员对事务管理员所携带事务的处理态度。事务管理员:被其它事务加入的事务。事务协调员:加入其它事务的事务。(1)在业务类中开启事务。
2025-04-15 13:19:09
204
原创 HttpMessageNotWritableException: No converter found 错误
完整错误:org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.example.domain.User。这个错误表明 Spring 无法找到合适的消息转换器来将 User 对象序列化为响应体。导入jackson-databind依赖包。
2025-04-13 19:19:59
194
原创 Spring学习-2(AOP)
使用JoinPoint接口的getArgs()方法获取原始方法的参数,该接口是ProceedingJoinPoint接口的父接口,所以ProceedingJoinPoint也可以调用getArgs()方法获取原始方法的参数。若原始方法有返回值,则增强方法也需定义对应的返回值,并在调用原始方法后,经过增强的原始方法返回值为增强方法的返回值。(4)切面:在确定切入点和通知后,需要将切入点和通知进行绑定,以确保对对应的方法进行增强,那么这种进行切入点和通知绑定的操作就是切面。(5)绑定切入点和通知。
2025-04-12 17:39:28
331
原创 Servlet学习-2(Cookie与Session)
Session即会话,可以简单的理解为一个用户在一段时间内请求服务器就是一次会话,举例:现有一名学生和老师,学生即用户前端,老师即服务器,学生问老师一次问题,老师回答一次问题即一次前端向服务器发送一次请求,服务器响应该请求,在一段时间内,学生问老师多个问题,并且老师回答学生多个问题,这么一个在一段时间内学生与老师的问答就是一次会话。Cookie是浏览器提供的技术,可将一些少量的数据保存在本地计算机上,不需要通过网络传输,可提高网页处理的效率,减少服务器的负载。获取Session对象最大不活动时间。
2025-04-07 22:04:08
689
原创 Servlet学习-1(HTTPRequest与HttpResponse)
使用forward将本次请求的request对象与response对象一并转发,即test收到的req对象与resp对象与本次请求的对象一样。前端发出一个请求,服务器接收处理后,服务器会响应,同时服务器会给前端一个新的地址,前端收到响应后,会立刻向新地址发第二个请求。原因:服务器所使用的码表不支持中文或前端所使用码表不支持中文,或服务器与前端所使用码表不一致。设置域对象内容,第一个参数为域对象名字,第二个参数为域对象值,类型为Object类型。解决方法:统一将服务器与前端所使用码表设置为UTF-8。
2025-04-07 19:35:53
394
原创 Mybatis学习-2
(1) 在Mapper开发中若想使用package扫描mapper文件,需在resource文件夹中创建与com包中mapper包同级的文件夹,并将mapper映射文件放入该文件夹中,这样在编译后,mapper接口会与mapper映射文件在同一个文件夹中,这样才可让mybatis配置文件中扫描mapper包的配置代码生效。在mapper映射文件中传递参数有两种方式,一是使用#{**},另外一种是${**},其中#{**}相当于在JDBC中使用PreparedStatement里的“?
2025-04-03 19:30:15
411
原创 Mybatis学习-1(入门程序)
(5)加载配置文件创建SqlSessionFactory对象。(2)创建mybatis-config.xml配置文件。(1)导入mybatis与连接数据库的依赖坐标。(3)创建UserMapper.xml映射文件。(4)创建UserMapper接口。(6)创建SqlSession对象。(7)创建mapper对象并使用。
2025-04-02 20:38:52
232
原创 JDBC学习
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。配置数据库信息,在配置dataSource时还有连接池最大连接数量等配置可设置,在此只进行最简单的配置,其他均使用默认设置。在创建数据库连接时和使用完毕后需要释放连接资源,当大量用户访问数据库时,大量的建立连接,释放连接会浪费大量时间与资源。(3)连接池的使用(使用druid连接池)(5)执行sql语句。
2025-04-02 16:56:41
271
原创 Spring学习-1(Spring的基本注解和整合Mabatis)
Scope的作用是设置一个bean是否为单例,若是单例则使用spring容器创建的同一对象的实例是同一实例(即两个实例的地址是一样的),若是非单例则不一样。@Bean注解的作用是将一个方法的返回值对象定义成bean,若需要在其他方法中使用该bean,则只需要将该对象作为方法参数即可,例如下面整合Mybatis时配置SqlSessionFactoryBean时方法参数为dataSource。@Component("***")表示该bean的id为***。@Service用于业务层bean定义。
2025-03-28 17:14:09
269
原创 Vue2学习-8(路由守卫)
路由对象中有一meta属性,可存放自定义数据,使用meta属性可对上面代码进行改进,在路由childComponent1中使用meta属性,存入自定义属性authFlag用来表示切换到该路由是是否需要进行权限校验,在获取自定义属性值时使用to.meta.authFlag即可得到。VueRouter对象中有一个beforeEach方法,参数为一个回调函数,回调函数有三个参数,第一个为to表示目标路由,第二个为from表示源路由,第三个为next,该参数为一个方法表示放行。
2025-03-27 19:31:43
266
原创 Vue2学习-7(路由-2)
现有两个路由组件:A.vue和B.vue,当前路由页面为A组件,当路由切换到B组件时,A组件会进行销毁,若不想A组件被销毁,则使用<keep-alive>标签包裹<router-view>标签,使用include属性表明哪个组件不销毁,不传值默认缓存该routerView中的所有组件。activated,deactivated,用于捕获路由组件的激活状态,前者表示当路由切换到该页面时activated被调用,后者表示当路由切走该页面时deactivated被调用。(2)replace进栈。
2025-03-26 10:56:08
155
原创 Vue2学习-6(路由-1)
正常点击路由跳转后会往历史记录栈中存一条记录(默认是push进栈),当点击浏览器后退按钮会回到上一条路由记录,若在路由中使用replace属性,则会开启replace进栈,在往记录栈中添加记录时会将上一条记录替换掉,点击浏览器后退按钮会回到上一条路由的上一条路由记录。在VueRouter对象中添加路由,若需要进行路由嵌套则在对应的路由对象中使用children属性,在children属性中添加路由对象。在添加路由对象时使用name属性可以给路由起名,在路由跳转时可直接将跳转路径改完该路由的所起的名字。
2025-03-26 09:51:16
469
原创 Vue2学习-5(Vuex-2)
在conputed属性中使用mapState与mapGetters,使用mapState表示在computed中生成了一个名为sum的计算属性,计算属性返回的值为sum。在methods中使用mapActions与mapMutations,使用mapActions表示在methods方法中生成一个名为addOne的函数,函数中直接执行,mapmutations同理。将不同类型的数据,对应的操作方法分别封装成一个对象,在Vuex中使用modules属性将封装好的对象放入。
2025-03-21 12:43:50
141
原创 Vue2学习-4(Vuex-1)
在action方法中使用context.commit()方法调用mutations中ADD的函数,第一个参数表示mutations中的函数名,第二个参数表示所要传递的值。state表示状态(即数据),将需要共享的数据放入state中,在组件中若需要对state数据进行操作则使用dispatch调用Actions中的方法,在Actions中定义处理state数据的业务逻辑,将要修改的state数据在Actions中使用commit方法调用Mutations中的方法对数据进行修改。index.js文件。
2025-03-20 20:42:16
269
原创 Vue2学习-3
Vue在执行methods中A方法时,并不是一遇到data中某一数据发生改变就重新解析模板,而是将A方法中所有代码执行后再重新解析模板,若在A方法中需要对重新解析模板后的页面进行DOM操作,则需使用$nextTick方法。例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。若未在子组件标签中填入标签内容,则使用<slot>中的所填的默认内容。在子组件标签中填入所要插入的内容。
2025-03-20 19:00:21
291
原创 Vue2学习-2(组件通信)
(1)往Vue对象的prototype中添加一个总线属性(即$bus),总线的值为Vue对象本身。(4)子组件调用该函数,并将所要传递的值写入所调函数的参数中。(2)在父组件中定义子组件触发自定义事件后执行的函数。(1)在父组件中使用ref属性给子组件一个id号。(3)在发送数据的组件中触发总线上的自定义事件。(1)在父组件中,给子组件绑定一个变量。(1)在父组件中给子组件绑定自定义事件。(1)让父组件给子组件传递一个函数。(3)在子组件中触发该自定义事件。(3)在子组件中触发自定义事件。
2025-03-15 20:43:01
155
原创 Vue2学习-1
7.使用v-for遍历时,如果需要改变数组顺序,则需要使用:key绑定数组中的唯一标识,否则在某些场景下会导致dom元素与对应数据混乱。1.Vue实例中的data数据通过数据代理方式写入_data中(数据代理即通过别的对象给你传递数据)。deep表示是否开启深度侦听,开启深度侦听后,即便对象中某一属性发生变化也会被侦听到。big函数在指令与元素成功绑定时或指令所在的模板被重新解析时调用。若计算属性中所依赖的数据发生变化,计算属性也会发生变化。vue学习过程中的简单记录。5.计算属性的两种写法。
2025-03-11 18:24:49
220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人