- 博客(66)
- 资源 (3)
- 问答 (6)
- 收藏
- 关注
原创 【Java特性】增强的switch语句
在Java JDK 10中引入了增强的switch语句,它提供了更灵活和可读性更高的switch语法。增强的switch语句允许在switch语句中使用表达式,而不仅限于常量。它使用箭头(->)操作符将表达式与相应的代码块关联起来。
2024-01-08 14:45:05
988
原创 【Kotlin】Kotlin的stream流编程浅析
Kotlin是一门由JetBrains公司开发的静态类型JVM语言,其可以与Java无缝集成。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。今天要浅析的stream流操作就来源于java8当中的特性。
2023-12-25 18:37:25
1554
原创 【Golang】为什么我们可以在Go语言中直接用整型与浮点型相比较
在Go语言中,float类型和int类型之间可以直接进行比较是因为Go语言中存在一种类型转换机制。当进行比较运算时,如果两个操作数的类型不同,Go语言会尝试将其中一个操作数的类型转换为另一个操作数的类型,以便进行比较。
2023-08-22 16:53:28
815
2
原创 【Git 完整提交规范】git的约定式提交规范
本文中的关键词 “必须(MUST)”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“应当(SHALL)”、“不应当(SHALL NOT)”、“应该(SHOULD)”、“不应该(SHOULD NOT)”、“推荐(RECOMMENDED)”、“可以(MAY)” 和 “可选(OPTIONAL)” ,其相关解释参考。
2022-12-29 11:25:37
2135
原创 【EasyExcel】excel的导入导出基本用法
在java开发中,我们时常会遇到,excel数据的导入导出,EasyExcel 就是一个能够帮助我们快速导入导出excel文件的工具,他提供了标准的上传文件工具,以及一些文件解析工具。
2022-10-24 11:43:55
2085
原创 【shiro-安全框架】入门基础学习
Apache Shiro是Java 的一个安全框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在]avaSE环境,也可以用在]avaEE环境。Shiro可以帮助我们完成:认证【登陆】、授权【权限】、加密【密码】、会话管理、与Web集成、缓存等。}
2022-09-20 20:01:41
1307
原创 【Spring Security】安全框架学习(十四)
我们之前的权限控制都是在对应的资源上面,加上注解去进行一个权限的配置。实际上spring security还允许我们在配置类中进行配置权限。例如我们之前就对login接口进行了一个相应的权限控制。
2022-09-12 10:04:47
1190
原创 【Spring Security】安全框架学习(十三)
我们也可以定义自己的权限校验方法,在@PreAuthorize注解中使用我们的方法。我们可以发现直接在@PreAuthorize内写方法名就可以用默认提供的方法,那么怎么才能直接通过方法名调用自己对象的方法呢。实际上涉及到了SpEL表达式,这门语言相对比较冷门,只需要了解即可。SpEL——Spring表达式语言我们首先要创建一个类,在类里面定义自己的方法,方法的定义格式参考security的格式就可以了。
2022-09-12 09:35:41
819
原创 【编程规范】 后端API接口设计编写与文档编写参考
一般前后端分离项目会拥有不同的数据格式,例如 json、url等。这里要通过文档的形式同前后端一起确定好数据阐述的格式。接口地址:不包含接口BASE地址。请求方式: get、post、put、delete等。请求参数:数据格式(默认json)、数据类型、是否必填、中文描述。响应参数:类型、中文描述。这里的接口文档一般就是对应后台的实体,即RequestVo(调用后台接口访问的实体)和给往前端的ResponseVo(前台调用接口时前往的实体)。
2022-09-07 12:07:30
22286
原创 【Spring Security】安全框架学习(十二)
这个就是我们之前在filter中存入到holder当中的对象,即UsernamePasswordAuthenticationToken,可以知道这里userAuthorities拿到了我们的权限对象,最终就调用到了我们自己在LoginUser类中重写的方法里去。但是回到hasAnyAuthorityName 方法中,传进去的prefix前缀的值实际上是null,也就是说实际上并没有做一个拼接,没有前缀,最终的结果也就是原本的字符串。但是我们并不用关心它在内部的调用链路,只需要关注核心的实现代码就可以了。
2022-09-06 16:45:42
1865
2
原创 【Spring Security】安全框架学习(十一)
本身springboot就自带了解决跨域问题的方法,但是光用springboot的那一套显然是不够用的,我们现在的资源请求都是交给spring security帮助我们进行管理、保护。专业的说法叫 预检请求,如果一个请求时非简单请求,会提前发送一个OPTIONS的预检请求,来决定是否发送真实请求,可以去看看HTTP CORS规则文档。浏览器出于安全的考虑,使用XMLHttpRequest对象发起HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求,默认情况下是被禁止的。
2022-09-04 10:56:16
393
原创 【Spring Security】安全框架学习(十)
我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道Spring Security的异常处理机制。在Spring Security中,如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。
2022-09-03 11:09:14
585
原创 【Spring Security】安全框架学习(九)
一个权限对应多个用户,一个用户也会有多个权限,看起来是一个多对多的关系,但是从用户的角度看是一个一对多的关系。要注意的是我们查询出来的结果需要去重,原因是因为每一个用户可以有多个角色,而每一个角色可能拥有的权限会有相同的地方,所以要用distinct来去重。在开发的过程中,给一个用户挨个赋予权限显然比较麻烦,所以我们可以建立起一个角色表,直接给用户赋予角色信息,即可将对应的权限通过角色间接的给用户。同时,一个用户可以有多个角色,一个角色也有多个用户,这样的多对多的关系同样可以用一个用户角色关联表关联起来。
2022-09-02 09:30:34
348
原创 【Spring Security】安全框架学习(八)
在上面的代码中,我们可以看到一个泛型 SimpleGrantedAuthority ,它是由Spring提供的,但是我们在存储进redis中的时候,为了安全考虑,默认情况下是不会把SimpleGrantedAuthority进行序列化存入的,如果不做操作的话,java会报异常。所以我们还需要在后台进行用户权限的判断,判断当前用户是否有相应的权限,必须基于所需权限才能进行相应的操作。这我们项目中主要采用的方式是基于注解的。的,前后端分离项目很少使用,所以我们可以使用注解去指定访问对应的资源所需的权限。
2022-09-02 09:28:14
2602
原创 【Spring Security】安全框架学习(七)
我们只需要定义一个登陆接口,然后获取SecurityContextHolder中的认证信息,删除redis中对应的数据即可。我们在这里的注销相当于只是让原来的token失效了, 重新登录时,如果原来的token没有过期就不会生成新token。文件中,添加相应的代码。中提供给前端对应的api。...
2022-08-28 10:11:11
410
原创 【Spring Security】安全框架学习(六)
一个是已认证的,一个是未认证的,结构不一样;同时,一个是登录,一个是验证两个场景,不能混在一起看。可以这么理解,之前的是登陆时验证,后面的这个是登录后访问验证。上面的代码与之前登陆的代码相比较,可以发现为什么之前UsernamePasswordAuthenticationToken存的是username和password,而这里存的是loginUser和null呢?我们需要自定义一个过滤器,这个过滤器会去获取请求头中的token,对token进行解析取出其中的userid。方法内部加上如下代码即可实现。..
2022-08-28 09:45:23
492
原创 【Spring Security】安全框架学习(五)
接下我们需要自定义登陆接口,然后让SpringSecurity对这个接口放行。在 2.3.2 准备工作中我们提供了一个jwt工具类,里面有3种重载形式,详情参考之前的源码。如果要使用jwt工具类,jdk1.8以上的版本可能需要导入这三个包 jjwt-api, jjwt-impl, jwt-jackson,jdk1.8一般来说没必要导。在接口中我们通过AuthenticationManager的authenticate方法来进行用户认...
2022-08-27 20:46:25
414
原创 【Spring Security】安全框架学习(四)
从之前的分析我们可以知道,我们可以自定义一个UserDetailsService,让SpringSecurity使用我们的UserDetailsService。我们自己的UserDetailsService可以从数据库中查询用户名和密码。默认使用的PasswordEncoder要求数据库中的密码格式为:{id}password。它会根据id去判断密码的加密方式。...
2022-08-27 20:44:12
338
原创 【Spring Security】安全框架学习(三)
②获取token中的userId,从redis中获取用户信息,存入SecurityContextHolder中。思考:Jwt认证过滤器中从获取到了userId后,怎么获取到完整的用户信息?登陆:①自定义登陆的接口,调用providerManager的方法进行认证。 如果认证通过,则生成JWT;把用户信息缓存到redis中。 ②自定义UserDetailService,实现查询数据库。校验:①定义JWT认证过滤器,获取token并解析token。实际上分了两部分,一个是登陆一个是校验。.
2022-08-27 11:15:14
319
原创 【Spring Security】安全框架学习(二)
由于安全框架提供了很多默认的设置,添加依赖就能直接运行,但是实际开发中我们只想要得到登陆的结果,就需要修改security提供的默认配置来实现自己的登陆流程。想要知道如何实现自己的登陆流程,就必须要先知道入门案例中的Spring Security的流程。Spring Security的原埋其实就是一个过滤器链,内部包含了提供各种功能的过滤器。我们可以通过debug查看当前系统中的Spring Security过滤链中有哪些过滤器以及他们的顺序。接口:它的实现类,表示当前访问系统的用户,封装了用户相关信息。.
2022-08-27 11:12:34
411
原创 【Spring Security】安全框架学习(一)
Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架shiro,它提供了更丰富的功能,社区资源也比 Shiro丰富。一般来说中大型的项目都是使用来做安全框架。小项目有Shiro的比较多,因为相比与Spring Security,Shiro的上手更加的简单。一般Web应用的需要进行认证和授权。认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户授权:经过认证后判断当前用户是否有权限进行某个操作。...
2022-08-26 12:52:19
341
原创 【Java开发技术】Redis在springboot中作为缓存时的使用
在java中我们可以编写config类,通过重写CacheManager方法,使redis成为项目中的缓存。当然除了这个配置类以外,也还需要现在yml文件中配置好redis的host,password等配置。
2022-07-16 21:48:17
536
原创 【软件设计模式】常用的设计模式的介绍
是一套反复使用的、多数人知晓的、经过分类编目的代码设计经验总结。是一种用于对软件系统中不断重现的设计问题的解决方案进行文档化的技术,是一种共享专家设计经验的技术。在特定的环境下为了解决某一通用软件设计问题提供的一套定制解决方案,描述了对象和类之间的相互作用。模式名称、问题、目的、解决方案、效果、实例代码、相关设计模式。创建型设计模式:用于对象的创建。结构型设计模式:用于处理对象或类之间的组合。行为型设计模式:描述类或对象怎样交互怎样分配职责的。类模式:处理类和子类之间的关系,通过继承建立,是一种静态的关系。
2022-07-01 04:35:35
518
原创 【SSM】关于SSM项目出现 “调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException: Ambiguous mapping。”问题的解决方案
摘要
2022-04-24 14:46:30
2204
c语言,请问为什么这里输出的x是4 3 1,x的值是怎么改变的
2020-07-07
c语言猜数游戏,为什么在循环中不能实现猜错了输出随机数在%d-%d之间呢
2020-04-22
为什么这个while嵌套循环他只会运行一次,而不能达到嵌套的目的呢
2020-04-19
mciSendString函数中的文件名怎么用变量值代替
2020-04-14
算任意两个日期之间的天数,总是差那么十几天,这是为什么呢,排查了很久也没查出来
2020-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人